第一步:CXF环境搭建
安装配置apache-cxf和apache-ant,软件下载地址:http://download.youkuaiyun.com/download/qciwyy/9976625和http://download.youkuaiyun.com/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的引用