基于Apache CXF的Web Service服务端/客户端

news/2024/7/4 15:00:14 标签: java

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

CXF服务端:

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

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

[html]  view plain  copy
 
  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类

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

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

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

 

转载于:https://www.cnblogs.com/sharpest/p/8376391.html


http://www.niftyadmin.cn/n/1670197.html

相关文章

【 sql数据库 】把逗号分隔的字符串拆成临时表

方式一&#xff1a;通过charindex和substring。 create function func_splitstring(str nvarchar(max),split varchar(10))returns t Table (c1 varchar(100))asbegin declare i int declare s int set i1 set s1 while(i>0) begin set ichar…

计算机组成原理奉远侦,计算机组成原理所研究的内容是什么?

满意答案xzparc2015.10.16采纳率&#xff1a;46% 等级&#xff1a;12已帮助&#xff1a;6852人计算机组成原理是计算机应用和计算机软件专业以及其他相关专业必修的专业基础课&#xff0c;它主要讨论计算机各组成部件的基本概念、基本结构、工作原理及设计方法。教学实践证明…

Java 20年:JVM虚拟化技术的发展

虚拟化技术已经有了几十年的发展历史&#xff0c;并且在硬件、操作系统层面都已经得到了广泛的应用。虚拟化不但可以显著节省成本&#xff0c;而且还可以提升管理性。同样&#xff0c;虚拟化技术也可以应用在JVM中&#xff0c;以提高资源利用率&#xff0c;降低单应用的部署成本…

java中类本身是用this_Java语言:this用法

在Java语言中&#xff0c;this在JAVA中所代表的意思是当前类中的意思. 明确引用的是本类中的属性&#xff0c;希望对大家学习Java语言有所帮助。1. 在构造方法或是set方法中初始化类中的属性.class AA{String name;public AA(String name){this.namename; //如果不写this那肯定…

Weblogic新建域,Weblogic新建部署环境,Weblogic重新构建域

Weblogic新建域&#xff0c;Weblogic新建部署环境&#xff0c;Weblogic重新构建域 蕃薯耀 2018年1月29日 http://www.cnblogs.com/fanshuyao/ 看不到图片请移步&#xff1a;http://fanshuyao.iteye.com/blog/2409648 一、第一步点击&#xff1a;Configuration Wizard 二、第二…

java 类域_JAVA 内部类的外围类私有域获取?

通过反射得到得到了 TalkingClock类中是有个静态方法&#xff0c;并且返回值是私有域的beep。在核心技术卷一中说到有方法可以借助这个方法得到私有域&#xff0c;求解&#xff1f;附上类的代码public class TalkingClock {private int interval;private boolean beep;/*** Con…

Java给pdf文件添加文字等信息

2019独角兽企业重金招聘Python工程师标准>>> maven依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…

java大众的排序功能_java之八大排序

的关系&#xff1a;1、直接插入排序(1)基本思想&#xff1a;在要排序的一组数中&#xff0c;假设前面(n-1)[n>2] 个数已经是排 好顺序的&#xff0c;现在要把第n个数插到前面的有序数中&#xff0c;使得这n个数 也是排好顺序的。如此反复循环&#xff0c;直到全部排好顺序。…