最近使用了一下cxf,简单的查看了部分源代码,给我的感觉它就是一个可以大大简化我们客户端编写远程方法调用的一个工具框架,只需要简单的几行代码就可以解决这种复杂的问题,下面就举个例子:
package com.yonge.cxf; import java.util.Date; import org.apache.cxf.frontend.ClientProxyFactoryBean; import org.apache.cxf.transport.jms.spec.JMSSpecConstants; import com.erayt.solar2.adapter.config.Weather; import com.erayt.solar2.adapter.fixed.HelloWorld; public class CXFClientTest { public static void main(String[] args) { ClientProxyFactoryBean factory = new ClientProxyFactoryBean(); factory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICATION_TRANSPORTID); factory.setAddress("http://localhost:9000/Hello"); HelloWorld hello = factory.create(HelloWorld.class); Weather weather1 = hello.getWeather(new Date()); System.out.println("forecast:" + weather1.getForecast()); } }
上面一段是客户端调用远程服务器中HelloWorld接口的getWeather方法 的一个具体实现。服务端的代码如下:
package com.erayt.solar2.adapter.driver; import org.apache.cxf.frontend.ServerFactoryBean; import com.erayt.solar2.adapter.config.HelloWorldImpl; import com.erayt.solar2.adapter.fixed.HelloWorld; public class CXFServer { protected CXFServer() throws Exception { HelloWorld helloworldImpl = new HelloWorldImpl(); ServerFactoryBean svrFactory = new ServerFactoryBean(); svrFactory.setServiceClass(HelloWorld.class); svrFactory.setAddress("http://localhost:9000/Hello"); svrFactory.setServiceBean(helloworldImpl); svrFactory.create(); } public static void main(String args[]) throws Exception { new CXFServer(); System.out.println("Server ready..."); Thread.sleep(50 * 60 * 1000); System.out.println("Server exiting"); System.exit(0); } }
服务端将接口以服务的形式发布后,必须提供客户端访问服务的地址(http://localhost:9000/Hello),客户端可以根据提供的地址访问服务端相关服务的wsdl文件,客户端可以根据wsdl文件生成对应的客户端代码,也就是HelloWorld接口文件,然后客户端可以像调用本地接口方法一样,去调用远程方法,客户端与服务端之间的交互是通过代理完成的,所以开发在编程时不需要关系他们是如何交互的,在代理中,上面的客户端请求hello.getWeather方法时会向服务端发送如下的消息:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:getWeather xmlns:ns1="http://fixed.adapter.solar2.erayt.com/"> <arg0>2013-06-22T18:56:43.808+08:00</arg0> </ns1:getWeather> </soap:Body> </soap:Envelope>
服务器端接收报文后,会解析报文,按照报文的信息执行相应的本地方法,然后将返回值又构造一个报文响应给客户端,如下:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:getWeatherResponse xmlns:ns1="http://fixed.adapter.solar2.erayt.com/"> <return> <forecast>Cloudy with showers </forecast> <howMuchRain>4.5</howMuchRain> <rain>true</rain> <temperature>39.3</temperature> </return> </ns1:getWeatherResponse> </soap:Body> </soap:Envelope>
代理接收消息后,会将他解析、包装成对象返回给客户端,最后开发就看到了服务器返回的数据了。在这里只介绍一下我理解的工作原理,详情可以去看官网的介绍http://cxf.apache.org/。
相关推荐
2. **CXF工作原理**:CXF通过Java语言绑定(JAXB)和Java对象模型(JAX-RS)将Java对象转换为XML消息,并将XML消息转换回Java对象。它支持WSDL(Web服务描述语言)第一和第二版,用于服务的描述和发现。 3. **创建...
源码包"apache-cxf-2.7.18-src.zip"包含了CXF框架的核心组件和相关模块,是深入理解CXF工作原理和进行定制开发的重要资源。 CXF主要由以下几个核心部分组成: 1. **Bus**:CXF的总线(Bus)是其核心组件,它管理...
这些代码可能涵盖了服务的定义、实现、配置以及客户端的调用等多个方面,是学习和理解CXF工作原理的好材料。 6. **学习与实践** - 学习CXF时,可以从创建一个简单的"Hello World"服务开始,逐步了解其配置、数据...
这个"apache-cxf-3.1.16-src"是一个源代码包,包含了完整的CXF框架源码,对于开发者来说,这是一个深入了解CXF工作原理和进行定制化开发的重要资源。 CXF是Java世界中广泛使用的Web服务实现框架,它支持多种协议和...
这个"apache-cxf-3.1.8-src.zip"压缩包包含了CXF项目的源代码,是理解CXF工作原理、进行定制开发或贡献代码的重要资源。 CXF的核心功能: 1. **SOAP与RESTful服务**:CXF支持基于SOAP的Web服务以及RESTful...
这个"apache-cxf-2.5.9-src.zip"文件包含的是Apache CXF 2.5.9版本的源代码,对于开发者来说,这是一个深入理解CXF工作原理、进行自定义扩展或调试的宝贵资源。 **Apache CXF是什么?** Apache CXF是一个全面的服务...
这个压缩包中的源代码提供了深入理解CXF工作原理的机会,同时也为自定义和扩展功能提供了可能。 Apache CXF的主要功能包括: 1. **SOAP和RESTful服务支持**:CXF允许开发者创建符合SOAP规范的Web服务以及遵循...
5. **示例**:包含的示例代码是学习和理解CXF工作原理的宝贵资源。这些示例涵盖了从创建基本的SOAP服务到实现复杂的RESTful接口的各种情况,帮助开发者快速上手并应用到实际项目中。 6. **依赖的jar包**:CXF 3.0...
在这个"CxfwebserviceDemo"压缩包中,我们可以找到一个基于CXF实现的Web服务示例项目,这对于学习和理解CXF工作原理及其使用方法非常有帮助。下面将详细介绍这个示例中的关键知识点。 1. **CXF入门**:首先,你需要...
【标题】:“Web服务CXF简单案例” 在Java世界中,Web服务是一个普遍采用的技术,用于不同系统间的通信。...解压后,可以逐个文件研究,加深对CXF工作原理的理解,同时也可以直接运行项目,进行实际操作。
分析源码可以加深对CXF工作原理的理解,学习如何处理异常、实现安全策略以及优化性能。 8. **RESTful服务**:除了传统的SOAP服务,CXF还支持创建和消费RESTful服务。理解JAX-RS标准,以及如何使用CXF实现资源化服务...
### xfire Java WebService (CXF前身框架了解WebService原理很好的入门框架) #### 一、XFire框架简介 XFire是一个轻量级的Java WebService框架,它被设计为易于使用且具有高性能。XFire最初由Matt Stevenson和...
CXF 体系架构 CXF 体系架构是基于服务orientated架构(SOA)的轻量级开源框架,提供了一个灵活、可扩展、可靠的服务开发与集成平台。该架构主要组件包括Bus、Front-end、Messaging & Interceptors、Service Model、...
在开发过程中,了解CXF的组件结构和工作原理,以及如何配置和使用其提供的各种功能,对于高效地开发和维护Web服务至关重要。记得在使用第三方资源时,要确保jar包的来源可靠,避免引入潜在的安全风险。同时,保持...
学习这个示例可以帮助初学者快速理解CXF的基本工作原理和使用方法,进而在自己的项目中灵活运用。通过研究源代码,你可以了解CXF如何处理请求、响应,以及如何与HTTP容器(如Tomcat)集成。 总之,Apache CXF是一个...
- `src`:源代码,对于开发者来说,可以查看并理解CXF的内部工作原理。 - `schema`:包含各种XML Schema定义,用于验证XML消息。 在使用"apache-cxf-2.5.2"时,开发者通常会首先阅读文档,了解如何配置和启动CXF...
CXF2.2.3是该框架的一个特定版本,发布于2009年,虽然现在已经比较老旧,但对于理解CXF的基本工作原理和历史发展仍有重要意义。 在CXF2.2.3这个完整架包中,`apache-cxf-2.2.3lib`目录包含了所有必要的库文件,这些...
Apache CXF是一个强大的开源框架,专门用于构建和实现Web服务。它遵循Java Community Process (JCP)和Web服务的相关标准,使得...通过理解CXF的工作原理和配置方法,开发者可以快速构建出高质量、可扩展的Web服务系统。
通过理解这两个框架的工作原理和使用方法,你可以构建出更加灵活、可维护的分布式系统。在开发过程中,务必注意对源码的管理和版本控制,以便于团队协作和后续的维护。同时,不断学习和掌握最新的技术趋势,能够提升...
CXF的源码是开放的,这为开发者提供了一个深入理解其工作原理的机会。通过阅读源码,我们可以学习到CXF如何处理服务调用、协议转换以及数据绑定等核心功能。这对于定制化开发、性能优化或者解决特定问题非常有帮助。...