`
liugang594
  • 浏览: 987496 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[CXF] Server与Client实现方式六:Local

 
阅读更多

【参考: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契约优先开发方式之客户端实现(client)"是基于CXF的客户端实现,它利用maven作为构建工具。Maven具有强大的插件系统,其中就包括CXF的插件,能够自动根据WSDL生成客户端的代理类。以下是如何...

    cxf spring server client demo.rar

    【标题】"CXF Spring Server Client Demo"是一个基于Apache CXF和Spring框架的SOAP Web服务示例项目。这个压缩包包含了一个服务器端(cxfserver)和一个客户端(cxfclient),用于展示如何使用CXF和Spring来创建、...

    cxf-rt-rs-client-3.0.1-API文档-中文版.zip

    Maven坐标:org.apache.cxf:cxf-rt-rs-client:3.0.1; 标签:cxf、rt、apache、client、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性...

    cxf server demo简单程序例子

    标签“cxf server demo java”强调了这个示例的核心要素:使用Java语言,基于CXF框架构建的服务器端应用。"demo"表明这是一个教学性质的代码示例,适合初学者理解和学习如何使用CXF搭建服务器。 【压缩包子文件的...

    cxf+spring+client

    在这个"**cxf+spring+client**"的主题中,我们将深入探讨CXF与Spring框架结合创建客户端服务的细节,以及如何利用Spring MVC来增强应用程序的交互性。 首先,让我们关注CXF。CXF允许开发者使用Java编程语言来定义和...

    cxfserver+spring+mybatis

    【标题】"cxfserver+spring+mybatis" 指的是一个基于Apache CXF服务端、Spring框架和MyBatis持久层技术构建的应用。这个组合常见于开发RESTful API或者SOAP Web服务,同时利用Spring进行依赖注入和管理,MyBatis作为...

    CXF Web Service & client

    - **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接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...

    cxf webservice所需jar包

    CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和部署Web服务。CXF提供了多种方式来实现Web服务,包括JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful ...

    cxf依赖jar包.zip

    本篇将详细讲解如何使用CXF来集成Web Service接口到一个Web项目中,以及与之相关的依赖包。 首先,我们需要了解CXF的基本概念。CXF全称是CXF - The Apache Software Foundation's Open Source Web Services ...

    web server 的 cxf 框架及使用说明

    它提供了一种灵活的方式来实现服务接口,无论是基于Java API for Web Services (JAX-WS)还是 Representational State Transfer (REST) 风格。本篇文章将深入探讨CXF的基本概念、环境配置以及如何在Web服务器上运行和...

    cxf webservice restful实现

    - 配置CXF服务:在Spring配置文件中,使用`&lt;jaxrs:server&gt;`元素声明CXF服务,并通过`&lt;jaxrs:serviceBean&gt;`引用服务实现类。 2. **客户端调用**: - 创建服务代理:使用CXF的`JAXRSClientFactory`,可以生成客户端...

    CXFServer(集成spring)

    CXFServer的实现旨在简化服务的创建、部署和管理过程,同时增强服务的安全性和效率。 ### 1. 集成Spring Spring框架是Java领域广泛使用的轻量级应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能。在CXFServer...

    使用CXF实现带header的soap服务

    在`frontend/client`或`frontend/server`的拦截器链中添加自定义拦截器,拦截器可以访问并处理Message对象中的header信息。 5. **创建客户端**:对于测试或集成,你可能需要创建一个CXF客户端,同样可以配置拦截器...

    CXF 编写 WebServer DEMO

    【标题】"CXF 编写 WebServer DEMO" 是一个使用Apache CXF框架构建Web服务的示例项目。Apache CXF是一个流行的开源框架,它允许开发者创建和部署SOAP和RESTful Web服务。这个DEMO旨在展示如何利用CXF轻松地搭建一个...

    cxf 2.1.3 client

    在这个例子中,"client"指的是使用CXF 2.1.3实现的客户端应用程序,它连接到"server"——运行XFire 1.2.6的服务端,进行交互。 在压缩包文件名"**cxf213**"中,我们可以推测这可能包含了CXF 2.1.3的相关库和配置...

    CXF实现SSL安全验证

    ### CXF实现SSL安全验证 在现代网络应用中,安全通信是至关重要的。Apache CXF 是一个开源项目,提供了一套强大的工具和服务框架,用于构建和开发基于标准的服务(如 Web Services)。本文将详细介绍如何使用 CXF ...

    CXF源码:CXF_Spring源码

    它提供了多种方式来实现Web服务,包括基于Java API for Web Services (JAX-WS) 和 Java API for RESTful Web Services (JAX-RS) 的服务。CXF与Spring框架的集成使得在Spring应用中使用和管理CXF服务变得更加方便。接...

    cxf-webservice

    CXF与Spring的结合使用,使得服务的生命周期管理变得更加简单,同时也方便了依赖注入和事务管理。 【标签】"源码" 指的是可能涉及CXF的底层实现,包括其API的使用和源代码级别的调试。"工具" 可能指的是CXF提供的...

    CXF开发教程03

    Cxf_Server部分则展示了服务端的实现,可能包含服务接口、实现类、Spring配置文件以及启动脚本。在实际开发中,服务端会监听HTTP或HTTPS端口,接收客户端请求,并返回相应的响应。这部分的代码分析有助于理解CXF如何...

Global site tag (gtag.js) - Google Analytics