转自:https://www.aliyun.com/zixun/wenji/1263190.html

CXF服务端:

  1. package com.sean.server;
  2. import javax.jws.WebParam;
  3. import javax.jws.WebService;
  4. @WebService
  5. public interface Plus {
  6. public int add(@WebParam(name="x") int x, @WebParam(name="y") int y);
  7. }
  1. package com.sean.server;
  2. public class PlusImpl implements Plus {
  3. public int add(int x, int y){
  4. return x + y;
  5. }
  6. }
  1. package com.sean.server;
  2. import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
  3. import org.apache.cxf.frontend.ServerFactoryBean;
  4. public class Server {
  5. public static void main(String args[]) throws Exception {
  6. PlusImpl plusImpl = new PlusImpl();
  7. JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
  8. //ServerFactoryBean factory = new ServerFactoryBean();
  9. factory.setServiceClass(Plus.class);
  10. factory.setAddress("http://127.0.0.1:8888/Plus");
  11. factory.setServiceBean(plusImpl);
  12. factory.create();
  13. }
  14. }

程序启动后,访问http://127.0.0.1:8888/Plus?wsdl即可查看自动生成的WSDL文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <wsdl:definitions targetNamespace="http://server.sean.com/"
  3. name="PlusService" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
  4. xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  5. xmlns:tns="http://server.sean.com/"
  6. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  7. xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  8. <wsdl:types>
  9. <xs:schema targetNamespace="http://server.sean.com/"
  10. xmlns:tns="http://server.sean.com/" version="1.0"
  11. elementFormDefault="unqualified"
  12. xmlns:xs="http://www.w3.org/2001/XMLSchema">
  13. <xs:element name="add" type="tns:add"/>
  14. <xs:element name="addResponse" type="tns:addResponse"/>
  15. <xs:complexType name="add">
  16. <xs:sequence>
  17. <xs:element name="x" type="xs:int"/>
  18. <xs:element name="y" type="xs:int"/>
  19. </xs:sequence>
  20. </xs:complexType>
  21. <xs:complexType name="addResponse">
  22. <xs:sequence>
  23. <xs:element name="return" type="xs:int"/>
  24. </xs:sequence>
  25. </xs:complexType>
  26. </xs:schema>
  27. </wsdl:types>
  28. <wsdl:message name="addResponse">
  29. <wsdl:part name="parameters" element="tns:addResponse"> </wsdl:part>
  30. </wsdl:message>
  31. <wsdl:message name="add">
  32. <wsdl:part name="parameters" element="tns:add"> </wsdl:part>
  33. </wsdl:message>
  34. <wsdl:portType name="Plus">
  35. <wsdl:operation name="add">
  36. <wsdl:input name="add" message="tns:add"> </wsdl:input>
  37. <wsdl:output name="addResponse" message="tns:addResponse"> </wsdl:output>
  38. </wsdl:operation>
  39. </wsdl:portType>
  40. <wsdl:binding name="PlusServiceSoapBinding" type="tns:Plus">
  41. <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  42. <wsdl:operation name="add">
  43. <soap:operation style="document" soapAction=""/>
  44. <wsdl:input name="add">
  45. <soap:body use="literal"/>
  46. </wsdl:input>
  47. <wsdl:output name="addResponse">
  48. <soap:body use="literal"/>
  49. </wsdl:output>
  50. </wsdl:operation>
  51. </wsdl:binding>
  52. <wsdl:service name="PlusService">
  53. <wsdl:port name="PlusPort" binding="tns:PlusServiceSoapBinding">
  54. <soap:address location="http://127.0.0.1:8888/Plus"/>
  55. </wsdl:port>
  56. </wsdl:service>
  57. </wsdl:definitions>

如果服务端使用ServerFactoryBean类,则最终生成的WSDL文件略有不同

CXF客户端:

如果服务端使用ServerFactoryBean类,则客户端需要使用JaxWsServerFactoryBean类

如果服务端使用JaxWsServerFactoryBean类,则客户端需要使用JaxWsProxyFactoryBean类

  1. package com.sean.client;
  2. import org.apache.cxf.frontend.ClientProxyFactoryBean;
  3. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
  4. import com.sean.server.Plus;
  5. public class Client {
  6. public static void main(String[] args) {
  7. //ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
  8. JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
  9. factory.setAddress("http://127.0.0.1:8888/Plus");
  10. Plus client = factory.create(Plus.class);
  11. System.out.println(client.add(2, 2));
  12. System.exit(0);
  13. }
  14. }

无论服务端使用ServerFactoryBean类还是JaxWsServerFactoryBean类,都可在客户端使用JaxWsDynamicClientFactory类,并通过反射的方式调用WebService服务端

  1. package com.sean.client;
  2. import org.apache.cxf.endpoint.Client;
  3. import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
  4. public class Client2 {
  5. public static void main(String[] args) throws Exception {
  6. JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
  7. Client client = factory.createClient("http://127.0.0.1:8888/Plus?wsdl");
  8. Object[] inputs = {1, 2};
  9. Object[] result = client.invoke("add", inputs);
  10. System.out.println(result[0]);
  11. }
  12. }

基于Apache CXF的Web Service服务端/客户端的更多相关文章

  1. 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice

    一.基于JAX-WS的Web Service服务端/客户端 下面描述的是在main函数中使用JAX-WS的Web Service的方法,不是在web工程里访问,在web工程里访问,参加第二节. JAX ...

  2. 使用Eclipse自带Web Service插件(Axis1.4)生成Web Service服务端/客户端

    创建一个名字为math的Java web工程,并将WSDL文件拷入该工程中 将Axis所需的jar包拷贝至WebRoot\WEB-INF\lib目录下,这些jar包会自动导入math工程中 一,生成W ...

  3. Eclipse+Axis使用WSDL文件生成Web Service服务端/客户端

    JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) WSDL文件的创建过程见http://blog.csdn.net/a19881029/ ...

  4. 使用Eclipse自带的Axis1插件生成Web Service服务端客户端

    JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) WSDL文件的创建过程见http://blog.csdn.net/a19881029/ ...

  5. 使用CXF开发Web Service服务

    1.使用CXF开发Web Service服务端 1.1 开发一个Web Service业务接口,该接口要用@WebService修饰 (1)创建一个Java项目MyServer (2)在MyServe ...

  6. Apache CXF实现Web Service(5)—— GZIP使用

    Apache CXF实现Web Service(5)-- GZIP使用 参考来源: CXF WebService整合Spring Apache CXF实现Web Service(1)--不借助重量级W ...

  7. 使用axis开发web service服务端

    一.axis环境搭建 1.安装环境 JDK.Tomcat或Resin.eclipse等. 2.到 http://www.apache.org/dyn/closer.cgi/ws/axis/1_4下载A ...

  8. Apache CXF实现Web Service(3)——Tomcat容器和不借助Spring的普通Servlet实现JAX-RS(RESTful) web service

    起步 参照这一系列的另外一篇文章: Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service 首先 ...

  9. Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service

    实现目标 http://localhost:9000/rs/roomservice 为入口, http://localhost:9000/rs/roomservice/room为房间列表, http: ...

随机推荐

  1. mysql在第一次查询的时候很慢,第二次查询就比较快的原因?

    1.默认 query_cache 是打开的 你使用 show global variables like '%query_cache%'; 确认一下有没有打开,如果打开了.第一次查询读数据文件,第二次 ...

  2. NSLayoutConstraint的使用

    *一切皆代码*- -- #继承关系框架|类|类:-:|:-:|:-:UIKit|NSLayoutConstraint|--|-|- #应用场景UI界面的搭建一般会占用项目开发相当一部分的时间.涉及到控 ...

  3. WRAR下载及注册

    下载过程: 1.打开winrar官网:https://www.win-rar.com 2.点击下载winrar按钮,如上图所示 3.进入下一页面,点击下载按钮即可完成下载过程 注册过程:https:/ ...

  4. Splash Screen(短时间弹出框,信息显示一次)

    原文引自codeproject site, http://www.codeproject.com/Articles/6511/Transparent-Splash-Screen 1.A splash ...

  5. H3C三层交换机S5500初始配置+网络访问策略

    DHCP中继配置命令 dhcp relay address-check enable 命令用来使能DHCP 中继的地址匹配检查功能. undo dhcp relay address-check ena ...

  6. MongoDB_pymongo

    python使用pymongo访问MongoDB的基本操作 安装pymongo: pip install pymongo from pymongo import MongoClient import ...

  7. java 常用API 包装 数据转换

    package com.oracel.demo01; public class Sjzh { // 将基本数据类型转字符串 public static void main(String[] args) ...

  8. 匈牙利&&EK算法(写给自己看)

    (写给自己看)匈牙利算法(最大匹配)和KM算法(最佳匹配) 匈牙利算法 思想 不断寻找增广路,每次寻得增广路,交换匹配边和非匹配边,则匹配点数+1 这里增广路含义:交错路,即从未匹配点出发经过未匹配边 ...

  9. 4056 hdu4866 Shooting

    题目描述 In the shooting game, the player can choose to stand in the position of [1, X] to shoot, you ca ...

  10. php多维数组的指定单个字段排序

    多维数组如何根据指定键值?比如现在有数组结构如下: ,,,,,'subject' => 'math'), 1 => array('name' => '3班','avgScore'=& ...