基于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: ...
随机推荐
- Docker installs
docker要求系统内核必须在3.10以上uname -r 命令查看你当前的内核版本 1.更新yum源并删除旧版docker yum remove docker docker-common docke ...
- vue-cli简介(中文翻译)
vue-cli是一个简单的vuejs脚手架命令行工具. 安装 准备:Node.js(>=4.x,推荐6.x版本),npm版本3以上和Git. $npm install -g vue-cli 使用 ...
- Oracle数据库安装与连接与简介
Oracle数据库的安装 1.登录Oracle官网——试用和下载 2.同意协议--->file1 3.完成配置 4.测试连接:打开Oracle developer--->新建连接,注意用户 ...
- mybatis学习笔记之学习目录(1)
mybatis学习笔记之学习结构(1) 学习结构: 1.mybatis开发方法 原始dao开发方法(程序需要编写dao接口和dao实现类) mybatis的mapper接口(相当于dao接口)代理开发 ...
- 用Navicat自动备份mysql数据库
以下文章转载自https://blog.csdn.net/u013628152/article/details/54909885,放在自己的博客园以供后面方便查询 —————————————————— ...
- Javase 集合1
package Swxx; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; pu ...
- WEBGL学习【八】模型视图投影矩阵
<!--探讨WEBGL中不同图形的绘制方法:[待测试2017.11.6]--> <!DOCTYPE HTML> <html lang="en"> ...
- CentOS 笔记(六) 历史命令 自动补充
history #出现历史的命令 #执行具体的一条历史命令 !458 ②安装自动补充功能 yum install -y bash-completion #输入命令 按Tab 会显示所有内容 syste ...
- MongoDB记录(坑在末尾)
Mongo数据库基本配置 基本配置 密码配置 pymongo认证 参考资料 基本配置 基本配置包括 1.端口号:默认27017,安全性较低 2.数据库文件位置 3.日志文件位置 4.日志写入模式 5. ...
- ORM框架 SQLAlchemy
什么是ORM 使用关系对象映射进行数据库操作. 将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 分类 -DB first 手动创建数据库和表,自动生成类 -code first 手动 ...