【参考:http://cxf.apache.org/docs/local-transport.html 】
除了remote的交互方式,cxf还提供了一种local的交互方式,它允许在同一个JVM内进行service的调用。
一、服务接口的定义
和之前几篇文章一样,定义很简单:
@WebService public interface OrderProcess { public String processOrder(Order order); }
二、服务端的实现
除了address使用的protocol是local以外,和http的方式几乎没有区别:
Endpoint.publish("local://orderProcess", new OrderProcessImpl());
或者是Spring的方式:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <jaxws:endpoint id="orderProcess" implementorClass="com.liulutu.liugang.local.OrderProcess" implementor="com.liulutu.liugang.local.OrderProcessImpl" address="local://orderProcess" /> </beans>
三、Client端实现
ClientProxyFactoryBean clientBean = new ClientProxyFactoryBean(); clientBean.setAddress("local://orderProcess"); clientBean.setServiceClass(OrderProcess.class); OrderProcess orderProcess = clientBean.create(OrderProcess.class); Order order = new Order(); order.setId("hello"); System.out.println(orderProcess.processOrder(order));
或者是Spring的方式:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <jaxws:client id="orderProcessClient" serviceClass="com.liulutu.liugang.local.OrderProcess" address="local://orderProcess" /> </beans>
然后在java代码里:
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "/com/liulutu/liugang/local/client.xml"); OrderProcess orderProcess = context.getBean("orderProcessClient", OrderProcess.class); Order order = new Order(); order.setId("hello"); String processOrder = orderProcess.processOrder(order); System.out.println(processOrder);
四、同一个JVM的问题
注意:使用local协议,我们不能像远程调用那种分别启动Server端和Client端,然后双方通信,server和Client必须在同一个JVM实例下,并且我发现,它们之间甚至不能分别创建org.apache.cxf.transport.local.LocalTransportFactory实例。因此可能的方式如下:
Java的方式 -- 合并Server和Client两段java代码:
//start server Endpoint.publish("local://orderProcess", new OrderProcessImpl()); //start client ClientProxyFactoryBean clientBean = new ClientProxyFactoryBean(); clientBean.setAddress("local://orderProcess"); clientBean.setServiceClass(OrderProcess.class); OrderProcess orderProcess = clientBean.create(OrderProcess.class); Order order = new Order(); order.setId("hello"); System.out.println(orderProcess.processOrder(order));
Spring方式一 -- 使用一个ApplicationContext同时加载Server和Client的Spring配置:
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "/com/liulutu/liugang/local/client.xml", "/com/liulutu/liugang/local/server.xml"); OrderProcess orderProcess = context.getBean("orderProcessClient", OrderProcess.class); Order order = new Order(); order.setId("hello"); String processOrder = orderProcess.processOrder(order); System.out.println(processOrder);
Spring方式二 -- 合并Server和Client的Spring配置内容:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <jaxws:client id="orderProcessClient" serviceClass="com.liulutu.liugang.local.OrderProcess" address="local://orderProcess" /> <jaxws:endpoint id="orderProcess" implementorClass="com.liulutu.liugang.local.OrderProcess" implementor="com.liulutu.liugang.local.OrderProcessImpl" address="local://orderProcess" /> </beans>
然后在代码里:
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "/com/liulutu/liugang/local/client.xml"); OrderProcess orderProcess = context.getBean("orderProcessClient", OrderProcess.class); Order order = new Order(); order.setId("hello"); String processOrder = orderProcess.processOrder(order); System.out.println(processOrder);
相关推荐
cxf spring server client demo.rar soap webservice
本实例是基于CXF的一个客户端的实现,使用maven生成客户端代码,集成spring配置客户端实现类,访问外部接口。“CXF契约优先开发方式”中的实例为服务器端代码。
Maven坐标:org.apache.cxf:cxf-rt-rs-client:3.0.1; 标签:cxf、rt、apache、client、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性...
cxfserver+spring+mybatis
cxf+spring+client+springmvc
关于java CXF 一个简单的例子,所用jar包请自己下载 谢谢
SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验
使用webservice的cxf做server与client例子
CXF实现SSL安全验证,实现https的WebService
CXF 编写 WebServer DEMO,使用 CXF 工具编写 WebServer
2、将cxf_jar包文件夹下所有包,拷至MyCXFService与MyCXFClient项目WebRoot\WEB-INF\lib\cxf_2.7.8 目录下(注意:两个项目都需要这些jar包) 3、将两个项目都导入myEclipse 4、将MyCXFService与MyCXFClient 一起...
使用spring集成cxf,在两个web ...server端使用spring+springmvc+mybatis+cxf,client端使用struts2+spring+hibernate+cxf 两个工程均为myeclipse project,包含所有除myeclipse自带以外所有jar 内附 使用文档,数据库脚本
CXF源码:CXF_Spring源码 CXF源码:CXF_Spring源码
cxf实现soap webservice服务,服务端\客户端均与spring结合使用,多种方式实现,花了三天时间弄懂,还有许多不懂的地方,欢迎大家交流.参考我的博文:http://blog.csdn.net/qq_33764491/article/details/78831010
3.抛弃cxf默认的log方式,使用log4j的方式,方便以后整合到其他app中而不改变之前系统log的方式。 答谢: 关于cxf的深入研究,我发现国人翻译的东西很少,我想尽自己的微薄之力能给大家带些有用的东西,如果有什么...
cxf 所有jar 和环境配置详细说明,一看就会好运行环境
使用CXF开发Web Service,包含服务器端和客户端
Maven坐标:org.apache.cxf:cxf-core:3.0.1; 标签:cxf、core、apache、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中...
CXFServer 已实现功能 1. 集成 spring 2. 集成 WSS4J 3. mtom 功能 4. 基本数据类型service接口 5. 复杂数据类型service接口
CXF视频:1、使用CXF实现简单的HelloWorld