【参考: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契约优先开发方式之客户端实现(client)"是基于CXF的客户端实现,它利用maven作为构建工具。Maven具有强大的插件系统,其中就包括CXF的插件,能够自动根据WSDL生成客户端的代理类。以下是如何...
【标题】"CXF Spring Server Client Demo"是一个基于Apache CXF和Spring框架的SOAP Web服务示例项目。这个压缩包包含了一个服务器端(cxfserver)和一个客户端(cxfclient),用于展示如何使用CXF和Spring来创建、...
Maven坐标:org.apache.cxf:cxf-rt-rs-client:3.0.1; 标签:cxf、rt、apache、client、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性...
标签“cxf server demo java”强调了这个示例的核心要素:使用Java语言,基于CXF框架构建的服务器端应用。"demo"表明这是一个教学性质的代码示例,适合初学者理解和学习如何使用CXF搭建服务器。 【压缩包子文件的...
在这个"**cxf+spring+client**"的主题中,我们将深入探讨CXF与Spring框架结合创建客户端服务的细节,以及如何利用Spring MVC来增强应用程序的交互性。 首先,让我们关注CXF。CXF允许开发者使用Java编程语言来定义和...
【标题】"cxfserver+spring+mybatis" 指的是一个基于Apache CXF服务端、Spring框架和MyBatis持久层技术构建的应用。这个组合常见于开发RESTful API或者SOAP Web服务,同时利用Spring进行依赖注入和管理,MyBatis作为...
- **CXF的Endpoint和Server**:在CXF中,Endpoint是实际对外提供服务的对象,而Server则负责启动和管理Endpoint。你可以通过`org.apache.cxf.frontend.ServerFactoryBean`配置并启动服务。 ### 3. Web Service...
SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...
CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和部署Web服务。CXF提供了多种方式来实现Web服务,包括JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful ...
本篇将详细讲解如何使用CXF来集成Web Service接口到一个Web项目中,以及与之相关的依赖包。 首先,我们需要了解CXF的基本概念。CXF全称是CXF - The Apache Software Foundation's Open Source Web Services ...
它提供了一种灵活的方式来实现服务接口,无论是基于Java API for Web Services (JAX-WS)还是 Representational State Transfer (REST) 风格。本篇文章将深入探讨CXF的基本概念、环境配置以及如何在Web服务器上运行和...
- 配置CXF服务:在Spring配置文件中,使用`<jaxrs:server>`元素声明CXF服务,并通过`<jaxrs:serviceBean>`引用服务实现类。 2. **客户端调用**: - 创建服务代理:使用CXF的`JAXRSClientFactory`,可以生成客户端...
CXFServer的实现旨在简化服务的创建、部署和管理过程,同时增强服务的安全性和效率。 ### 1. 集成Spring Spring框架是Java领域广泛使用的轻量级应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能。在CXFServer...
在`frontend/client`或`frontend/server`的拦截器链中添加自定义拦截器,拦截器可以访问并处理Message对象中的header信息。 5. **创建客户端**:对于测试或集成,你可能需要创建一个CXF客户端,同样可以配置拦截器...
【标题】"CXF 编写 WebServer DEMO" 是一个使用Apache CXF框架构建Web服务的示例项目。Apache CXF是一个流行的开源框架,它允许开发者创建和部署SOAP和RESTful Web服务。这个DEMO旨在展示如何利用CXF轻松地搭建一个...
在这个例子中,"client"指的是使用CXF 2.1.3实现的客户端应用程序,它连接到"server"——运行XFire 1.2.6的服务端,进行交互。 在压缩包文件名"**cxf213**"中,我们可以推测这可能包含了CXF 2.1.3的相关库和配置...
### CXF实现SSL安全验证 在现代网络应用中,安全通信是至关重要的。Apache CXF 是一个开源项目,提供了一套强大的工具和服务框架,用于构建和开发基于标准的服务(如 Web Services)。本文将详细介绍如何使用 CXF ...
它提供了多种方式来实现Web服务,包括基于Java API for Web Services (JAX-WS) 和 Java API for RESTful Web Services (JAX-RS) 的服务。CXF与Spring框架的集成使得在Spring应用中使用和管理CXF服务变得更加方便。接...
CXF与Spring的结合使用,使得服务的生命周期管理变得更加简单,同时也方便了依赖注入和事务管理。 【标签】"源码" 指的是可能涉及CXF的底层实现,包括其API的使用和源代码级别的调试。"工具" 可能指的是CXF提供的...
Cxf_Server部分则展示了服务端的实现,可能包含服务接口、实现类、Spring配置文件以及启动脚本。在实际开发中,服务端会监听HTTP或HTTPS端口,接收客户端请求,并返回相应的响应。这部分的代码分析有助于理解CXF如何...