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版本的,
这是下载链接:
http://www.apache.org/dyn/closer.lua/cxf/3.1.14/apache-cxf-3.1.14.zip 。
下载好之后配置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文件夹的路径,
环境配置完成。
2.Eclipse创建webservice服务端
先介绍操作,再介绍原理。
Eclipse中新建动态web项目,Dyanmic web modult version选择2.5,3.0版本的好像后面使用cxf时会出现问题,Configuration选择CXF***,然后下一步,
这里勾选创建web.xml文件,
再下一步,能看到刚才的CXF配置的环境,然后点击完成。
动态项目创建完成之后,我的目录结构为:
下面贴代码:
接口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描述。
出现这些描述信息之后,就表示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,
然后进到这个Java项目的根目录àsrc目录下,我的是这样的: D:\javaeeworkspace\webservice2client\src ,
进入之后,打开命令行,进到这个src目录下,然后输入 wsdl2java http://10.201.23.77:8080/web?wsdl ,(根据自己的发布地址修改代码,最后加一个?wsdl即可),回车,稍等几秒会生成一个文件夹,
即生成客户端代码,生成之后,在eclipse中刷新项目,查看那个接口类文件,可能targetnamespace会缺少信息,
在这里填写图中下面一行的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("获取完成。");
-
}
-
-
}
右击运行,
Webservice客户端运行成功。
接下来是一些理论类描述:
关于命令行中使用wsdl2java 命令,打开一开始解压的CXF文件夹的bin目录,可以看到
这里是包含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,链接失效的话,请评论区留言个人百度账号,给你分享一下。
如果你能从这篇文章中获得一丁点对自己有用的信息,那这篇文章就是值得的;如果确实帮助了你,麻烦动一下鼠标,请点击推荐,
另外由于编者水平有限,文章中如有不妥之处或者有什么疑问,可直接在下面评论指出,不胜感激。