一、配置环境
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文档。
四、创建客户端
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机制是差不多的,只有我们只要知道远程访问的类的地址和接口,就可以顺利调用到远程类的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。