最近使用了一下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/。
相关推荐
xfire java webservice(cxf前身框架了解webservice原理很好的入门框架)
CXF体系架构
CXF实现WebService_1 的视频,WebService的工作原理以及SOAP的简介
主要给大家介绍了关于spring如何集成cxf实现webservice接口功能的相关资料,文中通过示例代码介绍的非常详细,对大家 的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
讲解了webservice的CXF框架的原理,并用具体的例子代码来教我们怎么使用。
OSGi原理与最佳实践基于作者多年使用0SGi的经验而编写,涵盖了0SGi从/kfqN深入的知识体系,从OSGi的简介开始,介绍OSGi的作用及基本概念;其后进入OSGi实战,结合实例讲解如何基于OSGi框架编写模块化、动态化的各种...
OSGI原理与最佳实践的完整版,共12章 第1 章OSGi 简介 第2 章OSGi 框架简介 第3 章基于Spring-DM 实现Petstore 第4 章基于Apache CXF 实现分布式Petstore 第5 章构建OSGI Bundle Repositor'y 第6 章OSGi 规范解读 ...
本书基于作者多年使用OSGi的经验而编写,涵盖了...最后对OSGi知识进行深入讲解,通过对OSGi规范和实现框架(Equinox、Felix、Spring-DM和Apache CXF)的分析,以及最佳实践的介绍,帮助读者更好地掌握如何使用OSGi。
最后对OSGi知识进行深入讲解,通过对OSGi规范和实现框架(Equinox、Felix、Spring-DM和Apache CXF)的分析,以及最佳实践的介绍,帮助读者更好地掌握如何使用OSGi。 本书适合希望了解、深入掌握OSGi,以及编写模块化...
多年使用0SGi的经验而编写,涵盖了0SGi从入门到深入的...最后对0SGi知识进行深入讲解,通过对0SGi规范和实现框架(Equinox、Felix、Spring—DM和Apache CXF)的分析,以及最佳实践的介绍,帮助读者更好地掌握如何使用OSGi
web service 是java开源的一个远程调用技术,本项目使用了CXF来实现WEB Service的一个案例,同时项目里面有对JAXB的运用,JAXB技术主要运用在java类与xml之间的转换, ...这个对于了解web service的工作原理很重要。
【图五】系统安全拦截原理 4.动态表单管理 BPMX3提供了基于数据库内部表、外部表、视图等来生成在线的流程表单的功能,其生成是基于模板,模板可由开发人员进行自定义,也可以采用BPMX3提供的默认模板。生成的表单...
JAVA的WebService支持.rar,详细介绍了cxf、axis、wsdl、soap等原理及应用开发!
一般的解决方案是使用服务器代理(由同域服务器跨域请求后返回),但导致过于复杂(参见:Java-webservice-CXF-SOAP服务.docx服务器代理)。 如果服务器能够操作,也可以使用JSONP允许跨域请求。
10、后台权限采用流行的shiro权限管理框架,通过本项目可以深入了解shiro权限框架的应用及原理。 11、项目部署采用tomcat+Nginx的集群部署方式,在部署过程中可以深刻体会到nginx在负载均衡中发挥的优势。
熟练使用JUnit结合DBUnit、EasyMock等测试工具,并了解Hamcrest、Suite、Stub等测试原理; 熟悉Linux常用命令; 熟练使用Git、SVN代码管理工具; 熟练使用Dubbo、ZooKeeper搭建分布式项目; 了解shiro进行权限认证与...
WebService/ApacheCXF RMI/Spring RMI Hession 传统RPC技术在大型分布式架构下面临的问题 分布式架构下的RPC解决方案 Zookeeper 分布式系统的基石 从0开始搭建3个节点额度zookeeper集群 深入分析Zookeeper在...
详细介绍了如何用Xfire,CXF,Axis 开发Web 服务.Webservice 的底层原理并不在本文研究的范围内。所有示例都在 sample 目录里。这个学习手册的目的是只要仔细阅读本文档以及示例代码,任何对 webservice 没有基础的...
06.WSDL深入详解和WebService调用过程的底层本质
基于SpringBoot + Spring + Apache CXF +Mybatis 开发SOAP的 WebService 服务 # 备注 | **版本** | **说明**| | ------ |:------:| | 1.0.0版本| | | 2.0.0版本|springboot启动| # 原理 Mybatis基于动态代理实现...