一、配置环境
1.下载CXF的api,并解压到本地
2.添加环境变量:CXF_HOME
3.Path变量末尾:%CXF_HOME%\bin;
4.ClassPath变量末尾添加:%CXF_HOME%\lib\cxf-manifest.jar;
二、创建服务端
1.建立java项目。
2.引入cxf依赖包。
3.创建服务类
package com.tgb.cxf.server;
import javax.jws.WebService;
import javax.xml.ws.BindingType;
@WebService
//使用SOAP2协议
@BindingType(value=javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)
public class HelloService {
public String sayHello(String name){
return "hello" +name;
}
}
4.发布服务
用两个不同的类发布应用:
ServerFactoryBean(不需要使用@webservice)生成的文档不规范,不建议使用
JaxWsServerFactoryBean(建议使用此类,需要使用@webservice)生成的文档不规范,可以发SOAP1.1,SOAP1.2的协议,当cxf的服务类中没有方法时也可以发布成功,不报错。如果使用SOAP1.2需要用@BindType注解;使用SOAP1.2时wsimport命令失效,需要使用cxf的wsdl2java
建议:发布服务的时候使用SOAP1.2,客户端调用的时候使用SOAP1.1
package com.tgb.cxf.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) {
//1.创建服务工厂对象
//ServerFactoryBean sfBean = new ServerFactoryBean();
JaxWsServerFactoryBean sfBean = new JaxWsServerFactoryBean();
//加入输入输出拦截器
sfBean.getInInterceptors().add(new LoggingInInterceptor());
sfBean.getOutInterceptors().add(new LoggingOutInterceptor());
//2.指定服务地址
sfBean.setAddress("http://127.0.0.1:5550/hello");
//3.设置服务类
sfBean.setServiceClass(HelloService.class);
//4.设置服务类的实例对象
sfBean.setServiceBean(new HelloService());
//5.发布服务
sfBean.create();
System.out.println("server ready...");
}
}
发布服务后,在浏览器输入地址:http://127.0.0.1:5550/hello?wsdl,可以看到发布的wsdl文档。
三、生成代码
使用wsdl2java命令生成java文件
四、创建客户端
1.新建java项目
将新生成的代码拷到客户端文件中。
2.调用服务
package com.tgb.cxf.client;
import com.tgb.cxf.server.HelloService;
import com.tgb.cxf.server.HelloServiceService;
public class Soap12Client {
public static void main(String[] args) {
HelloServiceService hsService = new HelloServiceService();
HelloService hs = hsService.getHelloServicePort();
String result = hs.sayHello("jiangxiao");
System.out.println(result);
}
}
运行代码:
说明调用成功!
总结:
webservice和我们当初学习过的wcf机制是差不多的,只有我们只要知道远程访问的类的地址和接口,就可以顺利调用到远程类的方法。