java cxf 3.1.6搭建web_eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一)...

eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(一)

本篇博客主要包含五个内容:

1.CXF换将搭建以及eclipse配置CXF。

2.eclipse创建webservice服务端。

3.eclipse创建webservice客户端访问webservice服务端。

4.使用Android studio创建webservice客户端APP访问服务端。

5.开发过程中可能出现的一些错误。

(后两个方面在下一篇博客中,详情见末尾。)

各工具版本号:

Eclipse:Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2)。

Jdk:1.7.0_60,64位,

Tomcat:apache-tomcat-7.0.47。

Android studio:目前最新版:Android studio 3.0.1。

闲话少叙,直奔主题。

1.CXF环境搭建以及eclipse配置CXF

从Apache官网http://cxf.apache.org/download.html下载CXF压缩包,我下载的是3.1.14版本的,

2b59ea59147fd7c43e4d25ea8e8a8e27.png

这是下载链接:

下载好之后配置CXF的环境变量,解压下载的压缩包,根据自己的路径配置环境变量,楼主是下面的路径,

在CLASSPATH中添加 D:\Java\apache-cxf-2.7.5\lib,

新建CXF_HOME,值为 D:\Java\apache-cxf-2.7.5,

在PATH中添加 D:\Java\apache-cxf-2.7.5\bin,

配置好之后,在eclipse的Windows->prerferences中找到webservice->CXF 2.*,然后配置,指向cxf文件夹的路径,

95f4189c7df98b3e596bdcc502ab7dd9.png

环境配置完成。

2.Eclipse创建webservice服务端

先介绍操作,再介绍原理。

Eclipse中新建动态web项目,Dyanmic web modult version选择2.5,3.0版本的好像后面使用cxf时会出现问题,Configuration选择CXF***,然后下一步,

4281506e0280fbf356e75b6320d05a81.png

这里勾选创建web.xml文件,

1f13f595708a5f717fb179dd52d200e5.png

再下一步,能看到刚才的CXF配置的环境,然后点击完成。

214ff9a5941eb2630f0d91692c4d6dd4.png

动态项目创建完成之后,我的目录结构为:

5cc284a07894c151494acf859c8e2609.png

下面贴代码:

接口SayHelloService.java

package com.diy.dao;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebResult;

import javax.jws.WebService;

@WebService(targetNamespace = "http://dao.diy.com", serviceName = "SayHelloService")

public interface SayHelloService {

@WebResult(name = "return", targetNamespace = "http://dao.diy.com")

@WebMethod(action = "http://dao.diy.com/sayHello")

public String sayHello(@WebParam(name = "arg0", targetNamespace = "http://dao.diy.com") String arg0);

}

实现类SayHelloServiceImpl.java

package com.diy.dao;

public class SayHelloServiceImpl implements SayHelloService {

public String sayHello(String arg0) {

return "Hello:" + arg0;

}

}

主类Server.java

package com.diy.dao;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class Server {

public static void main(String[] args) {

System.out.println("开启webservice。。。");

SayHelloService sayHelloService = new SayHelloServiceImpl();

String address = "http://10.201.23.77:8080/web";

JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();

factoryBean.setAddress(address); // 设置暴露地址

factoryBean.setServiceClass(SayHelloService.class); // 设置接口类

factoryBean.setServiceBean(sayHelloService); // 设置实现类

factoryBean.create();

System.out.println("开启webservice成功。。。");

}

}

在主类中右击run as ->Java application,如果开启失败,在任务管理器中关闭已经开启的Java进程,这是我的开启webservice服务成功界面:

开启webservice。。。

一月 03, 2018 1:05:02 下午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromClass

信息: Creating Service {http://dao.diy.com}SayHelloService from class com.diy.dao.SayHelloService

一月 03, 2018 1:05:03 下午 org.apache.cxf.endpoint.ServerImpl initDestination

信息: Setting the server's publish address to be http://10.201.23.77:8080/web

一月 03, 2018 1:05:03 下午 org.eclipse.jetty.util.log.Log initialized

信息: Logging initialized @1590ms

一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.Server doStart

信息: jetty-9.2.22.v20170606

一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.handler.AbstractHandler doStart

警告: No Server set for org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine$1@88a3523

一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.AbstractConnector doStart

信息: Started ServerConnector@79de7e39{HTTP/1.1}{10.201.23.77:8080}

一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.Server doStart

信息: Started @1746ms

一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.handler.ContextHandler setContextPath

警告: Empty contextPath

一月 03, 2018 1:05:03 下午 org.eclipse.jetty.server.handler.ContextHandler doStart

信息: Started o.e.j.s.h.ContextHandler@5abe12e3{/,null,AVAILABLE}

一月 03, 2018 1:05:03 下午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL

信息: Creating Service {http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01}Discovery from WSDL: classpath:/org/apache/cxf/ws/discovery/wsdl/wsdd-discovery-1.1-wsdl-os.wsdl

一月 03, 2018 1:05:03 下午 org.apache.cxf.endpoint.ServerImpl initDestination

信息: Setting the server's publish address to be soap.udp://239.255.255.250:3702

一月 03, 2018 1:05:05 下午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromClass

信息: Creating Service {http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01}DiscoveryProxy from class org.apache.cxf.jaxws.support.DummyImpl

开启webservice成功。。。

开启成功之后,在浏览器地址栏中输入:服务发布地址+?wsdl,比如我这里就是 http://10.201.23.77:8080/web?wsdl ,回车之后,出现服务的wsdl描述。

953efbd2840bbeaaa779eb87833988cb.png

出现这些描述信息之后,就表示webservice服务已经发布成功。

理论介绍:

Soapaction:在接口名上面,使用注解:

@WebService(targetNamespace = "http://dao.diy.com", serviceName = "SayHelloService"),targetnamespace的值就是包名倒写,

指明这是一个webservice服务,

在方法名上使用注解:

@WebResult(name = "return", targetNamespace = "http://dao.diy.com")

@WebMethod(action = "http://dao.diy.com/sayHello") ,

webresult指明返回结果,webmethod指明这是一个服务端的方法,其中的action对应soapaction,如果这里不写action,soapaction的值为空,客户端运行时,会报错,错误原因差不多是找不到方法名。接口中的每一个注解都不可缺少,否则客户端运行报错。

下面介绍eclipse创建webservice客户端。

3.eclipse创建webservice客户端来访问服务端

先介绍操作,再介绍原理。

使用eclipse创建一个Java项目,命名为webservice2client,

dfade6ec3858a42e90bf375c6f5f6e5a.png

然后进到这个Java项目的根目录àsrc目录下,我的是这样的: D:\javaeeworkspace\webservice2client\src ,

进入之后,打开命令行,进到这个src目录下,然后输入 wsdl2java http://10.201.23.77:8080/web?wsdl ,(根据自己的发布地址修改代码,最后加一个?wsdl即可),回车,稍等几秒会生成一个文件夹,

df13a8c73f9fa4697c70a9be04011cf6.png

即生成客户端代码,生成之后,在eclipse中刷新项目,查看那个接口类文件,可能targetnamespace会缺少信息,

dc4dcc73926e55af43e0fd4a30fa2853.png

在这里填写图中下面一行的targetNamespace值即可(我上一个demo项目中就不存在这个问题,这个不知道为什么),

新建一个Client类,代码为:

package com.diy.dao;

public class Client {

public static void main(String[] args) {

System.out.println("开始获取数据。。。");

SayHelloService_Service service = new SayHelloService_Service();

SayHelloService sayHelloService = service.getSayHelloServicePort();

System.out.println(sayHelloService.sayHello("1"));

System.out.println("获取完成。");

}

}

右击运行,

40891444e8651cee7b44a7e80760189f.png

Webservice客户端运行成功。

接下来是一些理论类描述:

关于命令行中使用wsdl2java 命令,打开一开始解压的CXF文件夹的bin目录,可以看到

e016dce3d7d1fd27aa3157c8e83b6e4d.png

这里是包含wsdl2Java命令的,所以在添加了cxf的环境变量之后,可以直接使用这个命令生成客户端代码,如果不使用wsdl2Java这个命令的话,也可以使用 jdk自带的生成客户端代码的命令, wsimport.exe 工具,详情可以参考 http://blog.csdn.net/tianma630/article/details/8231224 这个网址,介绍很详细。

剩下的两个方面,请查看个人的下一篇博客 : eclipse使用CXF3.1.*创建webservice服务端客户端以及客户端手机APP(二)

新增demo源码下载地址:链接:https://pan.baidu.com/s/1sm1w3ud  密码:0n40,链接失效的话,请评论区留言个人百度账号,给你分享一下。

如果你能从这篇文章中获得一丁点对自己有用的信息,那这篇文章就是值得的;如果确实帮助了你,麻烦动一下鼠标,请点击推荐,

5e0fdd91e51d9cbabf99c53cfec31100.png

另外由于编者水平有限,文章中如有不妥之处或者有什么疑问,可直接在下面评论指出,不胜感激。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值