转自: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. BluetoothA2dp蓝牙音箱的连接

    1:权限 <uses-feature android:name="android.hardware.bluetooth_le" android:required=" ...

  2. [ Tools ] [ MobaXterm ] [ SSH ] [ Linux ] 中文顯示解決

    預設是無法顯示中文的,需要修改連線的 Terminal Setting

  3. java servlet 3.0文件上传

    在以前,处理文件上传是一个很痛苦的事情,大都借助于开源的上传组件,诸如commons fileupload等.现在好了,很方便,便捷到比那些组件都方便至极.以前的HTML端上传表单不用改变什么,还是一 ...

  4. 认识优动漫PAINT,优动漫PAINT基本功能有哪些?

    优动漫PAINT是一款搭载了绘制漫画.插画所需所有功能的软件.拥有笔感自然真实.表现形式多样的画笔工具,及高效.完美.便捷的上色工具等. 本文将通过由优动漫PAINT描绘的作品为例,简单介绍该软件的功 ...

  5. 【转】Oracle基础结构认知—进程及逻辑结构 礼记八目 2017-12-17 19:33:21

    原文地址:https://www.toutiao.com/i6500477672349499917/ 一. Process Structure进程结构 Oracle有两种类型的进程: 服务器进程和后台 ...

  6. VC++6.0进行数字图像处理的步骤以及遇到的问题

    1) 2) 3) 添加CDIB类时,如果没有你要选的那个类,可以先随便选个基类继承,然后自己在代码里把基类修改成要继承的,把一些消息映射的注释掉就可以了,这样的话在建立类向导里也可以找到新建的类. / ...

  7. JS 从36个数字里面随机抽取8个

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. mysql 读写分离 ,mysql_proxy实现

    下载安装mysql_proxy: 解压后, 该目录包含已经编译好的二进制文件 . 1: 利用mysql_proxy实现负载均衡 执行mysql_proxy ./mysql-proxy-path/bin ...

  9. 可横向滑动的vue tab组件

    示例 前端使用技术:框架->vue 组件>ly-tab一个用于移动端的可触摸滑动具有回弹效果的可复用Vue组件 ly-tab 介绍地址 ly-tab npm地址 使用步骤 1,引入包,定义 ...

  10. springboot不加载bootstrap.properties文件

    1.首先说一下官网对bootstrap和application两种配置文件的区别: Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 ...