WebService CXF学习入门篇.docx
- 文档编号:9187907
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:17
- 大小:97.88KB
WebService CXF学习入门篇.docx
《WebService CXF学习入门篇.docx》由会员分享,可在线阅读,更多相关《WebService CXF学习入门篇.docx(17页珍藏版)》请在冰豆网上搜索。
WebServiceCXF学习入门篇
WebServiceCXF学习——入门篇
2010年12月13日星期一下午10:
05
入门篇1——CXF由来
WebService介绍
WebService让一个程序可以透明地调用互联网程序,不用管具体的实现细节。
只要WebService公开了服务接口,远程客户端就可以调用服务。
WebService是基于http协议的组件服务,WebService是分散式应用程序的发展趋势。
WebService的开源实现
WebService更多是一种标准,而不是一种具体的技术。
不同的平台,不同的语言大都提供WebService的开发实现。
在JAVA领域,WebService的框架很多,例如:
AXIS,XFire,CXF等。
AXIS,XFire相对比较成熟,资料相对较多。
在这里我们只对CXF进行讲解,其他大家想学习到互联网找相关资料学习。
CXF框架由来
ApacheCXF项目是由ObjectWebCeltix和CodeHausXFire合并成立。
ObjectWebCeltix是由IONA公司赞助,于2005年成立的开源JavaESB产品,XFire则是业界知名的SOAP堆栈。
合并后的ApacheCXF融合该两个开源项目的功能精华,提供了实现SOA所需要的核心ESB功能框架,包括SOA服务创建,服务路由,及一系列企业级QoS功能。
ApacheCXF架框的目标
1.概述
<>高性能
<>可扩展
<>直观易用
2.支持标准
<>JAX-WS,JSR-181,SAAJ,JAX-RS
<>SOAP1.1,1.2,WS-IBasicProfile,WS-Security,WS-Addressing,WS-RM,WS-Policy
<>WSDL1.1
<>MTOM
3.传输方式,绑定,数据绑定,传送数据格式
<>绑定:
SOAP,REST/HTTP
<>数据绑定:
JAXB2.x,Aegis,XMLBeans,SDO
<>传送数据格式:
XML,JSON,FastInfoset
<>传输方式:
HTTP,Servlet,JMS
4.部署灵活
<>轻量级:
可以将服务部署到Tomcat或其支持Spring的容器中
<>JBI整合:
部署一个服务引擎到JBI容器,例如:
ServiceMix,OpenESBorPetals
<>J2EE集成:
可以将服务部署到J2EE应用服务器上,例如:
Geronimo,JOnAS,JBoss,WebLogic,及WebSphere
<>Java客户端/服务端可以独立性
5.支持多种编程语言
<>完全支持JAX-WS2.x客户端/服务端模式
<>JAX-WS2.xsynchronous,asynchronousandone-wayAPI's
<>JAX-WS2.xDynamicInvocationInterface(DII)API
<>支持wrappedandnon-wrapped数据格式
<>XMLmessagingAPI
<>支持JavaScript和ECMAScript4XML(E4X)
<>支持CORBA
<>支持JBI及ServiceMix
6.可编程环境
<>JavatoWSDL
<>WSDLtoJava
<>XSDtoWSDL
<>WSDLtoXML
<>WSDLtoSOAP
<>WSDLtoservice
入门篇2——HelloWorld
理论联系实际,单单只讲理论那就成了纸上谈兵,用一个HelloWorldDemo可来说明事更加直观。
那下面咱们就开始进行讲解:
首先到apache官方网下载apache-cxf-2.2.2,地址:
http:
//cxf.apache.org/
新建一个JavaProject,导入cxf常用.jar包
Java代码
1. commons-logging-1.1.1.jar
2. geronimo-activation_1.1_spec-1.0.2.jar(orSun'sActivationjar)
3. geronimo-annotation_1.0_spec-1.1.1.jar(JSR250)
4. geronimo-javamail_1.4_spec-1.6.jar(orSun'sJavaMailjar)
5. geronimo-servlet_2.5_spec-1.2.jar(orSun'sServletjar)
6. geronimo-ws-metadata_2.0_spec-1.1.2.jar(JSR181)
7. geronimo-jaxws_2.1_spec-1.0.jar(orSun'sjaxws-api-2.1.jar)
8. geronimo-stax-api_1.0_spec-1.0.1.jar(orotherstax-apijar)
9. jaxb-api-2.1.jar
10. jaxb-impl-2.1.12.jar
11. jetty-6.1.21.jar
12. jetty-util-6.1.21.jar
13. neethi-2.0.4.jar
14. saaj-api-1.3.jar
15. saaj-impl-1.3.2.jar
16. wsdl4j-1.6.2.jar
17. wstx-asl-3.2.8.jar
18. XmlSchema-1.4.5.jar
19. xml-resolver-1.2.jar
20. cxf-2.2.2.jar
接下就是HelloWorldDemo开发了
第一步:
新建一个webservice接口
Java代码
1. @WebService
2. publicinterfaceIHelloWorld{
3. //@WebParam给参数命名,提高可代码可读性。
此项可选
4. blicStringsayHi(@WebParam(name="text")Stringtext);
5. }
通过注解@WebService申明为webservice接口
第二步,实现WebService接口
Java代码
1. @WebService
2. publicclassHelloWorldImplimplementsIHelloWorld{
3.
4. publicStringsayHi(Stringname){
5. System.out.println("sayHelloiscalledby"+name);
6. return"Hello"+name;
7. }
8.
9. }
第三步,创建服务端
Java代码
1. publicclassServer{
2.
3. privateServer(){
4. IHelloWorldhelloWorld=newHelloWorldImpl();
5. //创建WebService服务工厂
6. JaxWsServerFactoryBeanfactory=newJaxWsServerFactoryBean();
7. //注册WebService接口
8. factory.setServiceClass(IHelloWorld.class);
9. //发布接口
10. factory.setAddress("http:
//localhost:
9000/HelloWorld");
11. factory.setServiceBean(helloWorld);
12. //创建WebService
13. factory.create();
14. };
15.
16. publicstaticvoidmain(String[]args)throwsInterruptedException{
17. //启动服务端
18. newServer();
19. System.out.println("Serverready...");
20. //休眠一分钟,便于测试
21. Thread.sleep(1000*60);
22. System.out.println("Serverexit...");
23. System.exit(0);
24. }
25. }
第四步,创建客户端
Java代码
1. publicclassClient{
2.
3. privateClient(){};
4.
5. publicstaticvoidmain(String[]args){
6. //创建WebService客户端代理工厂
7. JaxWsProxyFactoryBeanfactory=newJaxWsProxyFactoryBean();
8. //注册WebService接口
9. factory.setServiceClass(HelloWorld.class);
10. //设置WebService地址
11. factory.setAddress("http:
//localhost:
9000/HelloWorld");
12. IHelloWorldiHelloWorld=(IHelloWorld)factory.create();
13. System.out.println("invokewebservice...");
14. System.out.println("messagecontextis:
"+iHelloWorld.sayHi("
15. Josen"));
16. System.exit(0);
17. }
18. }
19.
最后是万事俱备,只欠测试了
首先,运行服务端程序
其次,打开浏览器,在地址栏中输入http:
//localhost:
9000/HelloWorld?
wsdl(因为cxf自带了一个jetty服务器),查看接口是否发布成功,如里浏览器页面显示下面内容,证明接口发布成功
Java代码
1. definitionsname="IHelloWorldService"targetNamespace=" 2. types> 3. schemaattributeFormDefault="unqualified"elementFormDefault="unqualified"targetNamespace=" 4. elementname="sayHi"type="tns: sayHi"/> 5. complexTypename="sayHi"> 6. sequence> 7. elementminOccurs="0"name="text"type="xsd: string"/> 8. sequence> 9. complexType> 10. elementname="sayHiResponse"type="tns: sayHiResponse"/> 11. complexTypename="sayHiResponse"> 12. sequence> 13. elementminOccurs="0"name="return"type="xsd: string"/> 14. sequence> 15. complexType> 16. schema> 17. types> 18. messagename="sayHi"> 19. partelement="tns: sayHi"name="parameters"> 20. part> 21. message> 22. messagename="sayHiResponse"> 23. partelement="tns: sayHiResponse"name="parameters"> 24. part> 25. message> 26. portTypename="IHelloWorld"> 27. operationname="sayHi"> 28. inputmessage="tns: sayHi"name="sayHi"> 29. input> 30. outputmessage="tns: sayHiResponse"name="sayHiResponse"> 31. output> 32. operation> 33. portType> 34. bindingname="IHelloWorldServiceSoapBinding"type="tns: IHelloWorld"> 35. bindingstyle="document"transport="http: //schemas.xmlsoap.org/soap/http"/> 36. operationname="sayHi"> 37. operationsoapAction=""style="document"/> 38. inputname="sayHi"> 39. bodyuse="literal"/> 40. input> 41. outputname="sayHiResponse"> 42. bodyuse="literal"/> 43. output> 44. operation> 45. binding> 46. servicename="IHelloWorldService"> 47. portbinding="tns: IHelloWorldServiceSoapBinding"name="IHelloWorldPort"> 48. addresslocation="http: //localhost: 9000/HelloWorld"/> 49. port> 50. service> 51.
definitions>
入门篇3——WSDL描述
由于网上有很多相关这方面的资料,在这里我就转载
本文初步介绍了WebService'stack'中对于Web服务即时装配,自动集成起着关键作用的WSDL规范,首先介绍了WSDL的作用和意义,其次对WSDL文档的结构作出概要地介绍,对每个元素的作用作了探讨,分析了其开放和复用的体系设计的思想,最后通过一个实例详细说明了WSDL的工作模式。
本文所引用的资源主要包括两类,一类是Web服务的技术资源网站,包含了大量Web服务的技术信息,另一类是Web服务“stack"系列技术规范,他们是一个整体的技术体系,包括UDDI、SOAP、WSDL、XML等。
本文的最后给出了这些资源的链接,有兴趣的读者可以通过这些资源链接找到所需的内容。
WebService"Stack"
在我的先前的文章中,我已经介绍过Web服务的整个技术体系WebService"stack",如下图:
Figure1.WebService"stack"
其中,绿色部分是先前已经定义好的并且广泛使用的传输层和网络层的标准:
IP、HTTP、SMTP等。
而蓝色部分是目前开发的Web服务的相关标准协议,包括服务调用协议SOAP、服务描述协议WSDL和服务发现/集成协议UDDI,以及服务工作流描述语言WSFL。
而橙色部分描述的是更高层的待开发的关于路由、可靠性以及事务等方面的协议。
黄色部分是各个协议层的公用机制,这些机制一般由外部的正交机制来完成。
其中,一个可以使用的Web服务应当按照需要选用若干层次的功能,而无需所有的特性。
但是无论如何为了实现一个一般意义上的Web服务,具备Web服务的基础特性:
跨平台调用和接口可机器识别,那么必需使用WSDL和SOAP。
SOAP是用来最终完成Web服务调用的,而WSDL则是用于描述如何使用SOAP来调用Web服务的。
WSDL是一种XMLApplication,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。
WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。
相关的具体部署的服务访问点通过组合就成为抽象的Web服务。
在具体使用中,我们可以对WSDL进行扩展(类似SOAP的可扩展性),这样无论通信时使用何种消息格式或网络协议,都可以对服务访问点及其使用的消息格式进行描述。
在WSDL的框架中,可以使用任意的消息格式和网络协议,如同SOAP中可以使用任意的网络协议一样。
在WSDL规范中,定义了如何使用SOAP消息格式、HTTPGET/POST消息格式以及MIME格式来完成Web服务交互的规范。
WSDL概述
由于通信协议和消息格式在Web技术圈子里已经达到了标准化,我们知道在通常的开发过程中,对于对象的Interface一定具备相应的SDK描述文档,Web服务也是一种对象,只不过它是被部署在Web上而已。
很自然的,我们也完全需要有对Web服务这个对象的界面的SDK描述文档。
然而这两者又不尽相同,一来目前在Web上的应用已经完全接受了XML这个基本的标准,基本上所有新出台的技术都是基于XML标准的,二来Web服务的目标是即时装配,松散耦合以及自动集成的,这意味着SDK描述文档应当是具备被机器识别的能力的。
也就是说,对于使用标准化的消息格式/通信协议的Web服务,它需要以某种结构化的方式(即XML)对Web服务的调用/通信加以描述,而且实现这一点也显得非常重要,这是Web服务即时装配的基本保证。
WSDL正是这样一种描述语言,WSDL定义了一套基于XML的语法,将Web服务描述为能够进行消息交换的服务访问点的集合,从而满足了这种需求。
WSDL服务定义为分布式系统提供了可机器识别的SDK文档,并且可用于描述自动执行应用程序通信中所涉及的细节。
WSDL文档将Web服务定义为服务访问点或端口的集合。
在WSDL中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:
消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。
用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。
将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。
因此,WSDL文档在Web服务的定义中使用下列元素:
*Types-数据类型定义的容器,它使用某种类型系统(一般地使用XMLSchema中的类型系统)。
*Message-通信消息的数据结构的抽象类型化定义。
使用Types所定义的类型来定义整个消息的数据结构。
*Operation-对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。
*PortType-对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。
*Binding-特定端口类型的具体协议和数据格式规范的绑定。
*Port-定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
*Service-相关服务访问点的集合。
大家可以参考下图,来理解一下WSDL文档的结构组织:
Figure2.WSDL元素的对象结构示意图
其中,Types是一个数据类型定义的容器,包含了所有在消息定义中需要的XML元素的类型定义,我将在今后的文章中结合XMLSchema来详细说明如何进行类型定义。
Message具体定义了在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WebService CXF学习入门篇 CXF 学习 入门