基于Apache CXF的Web Service服务端/客户端
转自:https://www.aliyun.com/zixun/wenji/1263190.html
CXF服务端:
- package com.sean.server;
- import javax.jws.WebParam;
- import javax.jws.WebService;
- @WebService
- public interface Plus {
- public int add(@WebParam(name="x") int x, @WebParam(name="y") int y);
- }
- package com.sean.server;
- public class PlusImpl implements Plus {
- public int add(int x, int y){
- return x + y;
- }
- }
- package com.sean.server;
- import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
- import org.apache.cxf.frontend.ServerFactoryBean;
- public class Server {
- public static void main(String args[]) throws Exception {
- PlusImpl plusImpl = new PlusImpl();
- JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
- //ServerFactoryBean factory = new ServerFactoryBean();
- factory.setServiceClass(Plus.class);
- factory.setAddress("http://127.0.0.1:8888/Plus");
- factory.setServiceBean(plusImpl);
- factory.create();
- }
- }
程序启动后,访问http://127.0.0.1:8888/Plus?wsdl即可查看自动生成的WSDL文件
- <?xml version="1.0" encoding="UTF-8"?>
- <wsdl:definitions targetNamespace="http://server.sean.com/"
- name="PlusService" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
- xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
- xmlns:tns="http://server.sean.com/"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <xs:schema targetNamespace="http://server.sean.com/"
- xmlns:tns="http://server.sean.com/" version="1.0"
- elementFormDefault="unqualified"
- xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <xs:element name="add" type="tns:add"/>
- <xs:element name="addResponse" type="tns:addResponse"/>
- <xs:complexType name="add">
- <xs:sequence>
- <xs:element name="x" type="xs:int"/>
- <xs:element name="y" type="xs:int"/>
- </xs:sequence>
- </xs:complexType>
- <xs:complexType name="addResponse">
- <xs:sequence>
- <xs:element name="return" type="xs:int"/>
- </xs:sequence>
- </xs:complexType>
- </xs:schema>
- </wsdl:types>
- <wsdl:message name="addResponse">
- <wsdl:part name="parameters" element="tns:addResponse"> </wsdl:part>
- </wsdl:message>
- <wsdl:message name="add">
- <wsdl:part name="parameters" element="tns:add"> </wsdl:part>
- </wsdl:message>
- <wsdl:portType name="Plus">
- <wsdl:operation name="add">
- <wsdl:input name="add" message="tns:add"> </wsdl:input>
- <wsdl:output name="addResponse" message="tns:addResponse"> </wsdl:output>
- </wsdl:operation>
- </wsdl:portType>
- <wsdl:binding name="PlusServiceSoapBinding" type="tns:Plus">
- <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
- <wsdl:operation name="add">
- <soap:operation style="document" soapAction=""/>
- <wsdl:input name="add">
- <soap:body use="literal"/>
- </wsdl:input>
- <wsdl:output name="addResponse">
- <soap:body use="literal"/>
- </wsdl:output>
- </wsdl:operation>
- </wsdl:binding>
- <wsdl:service name="PlusService">
- <wsdl:port name="PlusPort" binding="tns:PlusServiceSoapBinding">
- <soap:address location="http://127.0.0.1:8888/Plus"/>
- </wsdl:port>
- </wsdl:service>
- </wsdl:definitions>
如果服务端使用ServerFactoryBean类,则最终生成的WSDL文件略有不同
CXF客户端:
如果服务端使用ServerFactoryBean类,则客户端需要使用JaxWsServerFactoryBean类
如果服务端使用JaxWsServerFactoryBean类,则客户端需要使用JaxWsProxyFactoryBean类
- package com.sean.client;
- import org.apache.cxf.frontend.ClientProxyFactoryBean;
- import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
- import com.sean.server.Plus;
- public class Client {
- public static void main(String[] args) {
- //ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
- JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
- factory.setAddress("http://127.0.0.1:8888/Plus");
- Plus client = factory.create(Plus.class);
- System.out.println(client.add(2, 2));
- System.exit(0);
- }
- }
无论服务端使用ServerFactoryBean类还是JaxWsServerFactoryBean类,都可在客户端使用JaxWsDynamicClientFactory类,并通过反射的方式调用WebService服务端
- package com.sean.client;
- import org.apache.cxf.endpoint.Client;
- import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
- public class Client2 {
- public static void main(String[] args) throws Exception {
- JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
- Client client = factory.createClient("http://127.0.0.1:8888/Plus?wsdl");
- Object[] inputs = {1, 2};
- Object[] result = client.invoke("add", inputs);
- System.out.println(result[0]);
- }
- }
基于Apache CXF的Web Service服务端/客户端的更多相关文章
- 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice
一.基于JAX-WS的Web Service服务端/客户端 下面描述的是在main函数中使用JAX-WS的Web Service的方法,不是在web工程里访问,在web工程里访问,参加第二节. JAX ...
- 使用Eclipse自带Web Service插件(Axis1.4)生成Web Service服务端/客户端
创建一个名字为math的Java web工程,并将WSDL文件拷入该工程中 将Axis所需的jar包拷贝至WebRoot\WEB-INF\lib目录下,这些jar包会自动导入math工程中 一,生成W ...
- Eclipse+Axis使用WSDL文件生成Web Service服务端/客户端
JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) WSDL文件的创建过程见http://blog.csdn.net/a19881029/ ...
- 使用Eclipse自带的Axis1插件生成Web Service服务端客户端
JDK版本:1.5.0_22 Eclipse版本:Helios Service Release 2(3.6.2) WSDL文件的创建过程见http://blog.csdn.net/a19881029/ ...
- 使用CXF开发Web Service服务
1.使用CXF开发Web Service服务端 1.1 开发一个Web Service业务接口,该接口要用@WebService修饰 (1)创建一个Java项目MyServer (2)在MyServe ...
- Apache CXF实现Web Service(5)—— GZIP使用
Apache CXF实现Web Service(5)-- GZIP使用 参考来源: CXF WebService整合Spring Apache CXF实现Web Service(1)--不借助重量级W ...
- 使用axis开发web service服务端
一.axis环境搭建 1.安装环境 JDK.Tomcat或Resin.eclipse等. 2.到 http://www.apache.org/dyn/closer.cgi/ws/axis/1_4下载A ...
- 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 首先 ...
- Apache CXF实现Web Service(2)——不借助重量级Web容器和Spring实现一个纯的JAX-RS(RESTful) web service
实现目标 http://localhost:9000/rs/roomservice 为入口, http://localhost:9000/rs/roomservice/room为房间列表, http: ...
随机推荐
- Datatable筛选数据
DataRow[] drArr = dt.Select("C1=’abc’");//查询 还可以这样操作: DataRow[] drArr = dt.Select("C1 ...
- Gitlab 维护措施
Gitlab 升级: https://jingyan.baidu.com/article/72ee561ab1b333e16038df63.html Gitlab Rpm包地址: https://pa ...
- T对象序列化后T对象中属性字段不见了?
序列化:JsonConvert.SerializeObject(T) 直接在类的上面添加[Table("表名")] 在类上添加属性[DataContract] 在属性上添加属性[D ...
- MacType 缺字问题【转】
- JavaScript Cookies使用
Cookie 是个存储在客户端(浏览器)记录信息确定用户身份的小文本文件,可以用来跟踪用户当前登陆状态和用户浏览页面的次数,记录用户输入的文本信息,也可以在页面间传递变量,记录用户一些行为. 当浏览器 ...
- Linker scripts之SECTIONS
1 Purpose The linker script describes how the sections in the input files should be mapped into the ...
- 杭电2060WA
#include<stdio.h> int main() { int n,num,p,q,i,a[]={2,3,4,5,6,7}; scanf("%d",&n) ...
- javascript中函数表达式的问题讨论
#函数表达式 ##函数声明和函数表达式的区别 函数的定义有两种形式,一种是函数声明,一种是函数表达式 使用声明时,要注意函数声明提升现象,比如说在if语句中使用声明会出错,但是表达式就不存在这个问题 ...
- RabbitMQ学习之基于spring-rabbitmq的RPC远程调用
http://blog.csdn.net/zhu_tianwei/article/details/40920985 spring-rabbitmq中实现远程接口调用,主要在com.rabbitmq.s ...
- 企业级任务调度框架Quartz(9) Quartz之作业触发器Trigger
前序: 我们已经大概对Quartz的基本有了一个大概的认识:现在我们将要逐渐对Quartz的各个重要组件进行学习:前面已经对job进行了详细讲解,现在我们来认识下它的一个重要兄弟,没有它,作 ...