第一步:CXF环境搭建
安装配置apache-cxf和apache-ant,软件下载地址:http://download.csdn.net/download/qciwyy/9976625和http://download.csdn.net/download/qciwyy/9976633
软件下载后配置环境变量
第二步:创建CXF项目
A)①新建服务端项目cxfServer
②引入依赖jar包,将apache-cxf-2.4.2\lib下面的所有jar拷贝到项目中
③创建服务类,
新建类HelloService
package com.ws.server; import javax.jws.WebService; import javax.xml.ws.BindingType; @WebService /*@BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)*/ @BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING) public class HelloService { public String sayHello(String name){ return name + " hello!"; } }新建发布类MyCXFServer
package com.ws.server; import org.apache.cxf.frontend.ServerFactoryBean; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; public class MyCXFserver { public static void main(String[] args) { /* * ServerFactoryBean(不需要使用@webservice) 生成的文档不规范,不建议使用 JaxWsServerFactoryBean(建议使用此类,需要使用@webservice) 生成的文档不规范, 可以发布SOAP1.1,SOAP1.2的协议,当cxf的服务类中没有方法时也可以发布成功,不报错。 如果使用SOAP1.2需要用@bindType注解指定 当使用SOAP1.2时wsimport命令失效,需要使用cxf的wsdl2java */ //创建服务工厂对象,不建议使用ServerFactoryBean,生成文档不规范 //ServerFactoryBean sfb = new ServerFactoryBean(); JaxWsServerFactoryBean sfb = new JaxWsServerFactoryBean(); //加入输入输出拦截器 sfb.getInInterceptors().add(new LoggingInInterceptor()); sfb.getOutInterceptors().add(new LoggingOutInterceptor()); //指定服务地址 sfb.setAddress("http://127.0.0.1:8883/hello"); //设置服务类 sfb.setServiceClass(HelloService.class); //设置服务类对象 sfb.setServiceBean(new HelloService()); //发布服务 sfb.create(); System.out.println("server readly-------------"); } }运行后,浏览器输入地址:http://127.0.0.1:8883/hello?wsdl
B)客户端调用
①说明:在cxf中,也提供了一个用于生成客户端调用代码的工具。它的功能就如同wsimport一样。
先让我们了解一下cxf的wsdl2java工具,可以生成一堆客户端调用的代码。既可以生成SOAP1.1也可以生成SOAP1.2
此工具位于cxf_home/bin目录下。参数与wsimport有所不同。
它包含以下参数:
a) -d参数,指定代码生成的目录。
b) -p参数,指定生成的新的包结构。
需要说明的是,由于wsdl2java是根据jdk1.7生成的本地代码,所以,需要对生成的代码做一点点修改。
在命令行执行:wsdl2java -d . -p com.ws.soap11 http://127.0.0.1:8883/hello?wsdl
②新建客户端项目cxfClient
将生成的java代码拷贝到项目中
新建测试类Soap11Client
package com.ws.client; import com.ws.soap11.HelloService; import com.ws.soap11.HelloServiceService; public class Soap11Client { public static void main(String[] args) { HelloServiceService hss = new HelloServiceService(); HelloService hs = hss.getHelloServicePort(); String result = hs.sayHello("lisi"); System.out.println(result); } }注意:BingingType的引用