




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WebService CXF学习(入门篇1):CXF由来WebService介绍 WebService让一个程序可以透明地调用互联网程序,不用管具体的实现细节。只要WebService公开了服务接口,远程客户端就可以调用服务。WebService是基于http协议的组件服务,WebService是分散式应用程序的发展趋势。 WebService的开源实现 WebService更多是一种标准,而不是一种具体的技术。不同的平台,不同的语言大都提供WebService的开发实现。在JAVA领域,WebService的框架很多,例如:AXIS,XFire,CXF等。AXIS,XFire相对比较成熟,资料相对较多。在这里我们只对CXF进行讲解,其他大家想学习到互联网找相关资料学习。 CXF框架由来 ApacheCXF项目是由ObjectWeb Celtix和CodeHaus XFire合并成立。ObjectWeb Celtix是由IONA公司赞助,于2005年成立的开源Java ESB产品,XFire则是业界知名的SOAP堆栈。合并后的ApacheCXF融合该两个开源项目的功能精华,提供了实现SOA所需要的核心ESB功能框架,包括SOA服务创建,服务路由,及一系列企业级QoS功能。 ApacheCXF架框的目标 1.概述 高性能 可扩展 直观易用 2.支持标准 JAX-WS, JSR-181, SAAJ, JAX-RS SOAP 1.1, 1.2, WS-I BasicProfile, WS-Security, WS-Addressing, WS-RM, WS-Policy WSDL 1.1 MTOM 3.传输方式,绑定,数据绑定,传送数据格式 绑定: SOAP, REST/HTTP 数据绑定: JAXB 2.x, Aegis, XMLBeans, SDO 传送数据格式: XML, JSON, FastInfoset 传输方式: HTTP, Servlet, JMS 4.部署灵活 轻量级: 可以将服务部署到 Tomcat或其支持Spring的容器中 JBI整合: 部署一个服务引擎到JBI容器,例如: ServiceMix, OpenESB or Petals J2EE集成: 可以将服务部署到J2EE应用服务器上,例如:Geronimo, JOnAS, JBoss, WebLogic, 及WebSphere Java 客户端/服务端可以独立性 5.支持多种编程语言 完全支持 JAX-WS 2.x 客户端/服务端模式 JAX-WS 2.x synchronous, asynchronous and one-way APIs JAX-WS 2.x Dynamic Invocation Interface (DII) API 支持 wrapped and non-wrapped 数据格式 XML messaging API 支持JavaScript 和 ECMAScript 4 XML (E4X) 支持CORBA 支持JBI及ServiceMix 6.可编程环境 Java to WSDL WSDL to Java XSD to WSDL WSDL to XML WSDL to SOAP WSDL to serviceWebService CXF学习(入门篇2):HelloWorld理论联系实际,单单只讲理论那就成了纸上谈兵,用一个HelloWorld Demo可来说明事更加直观。那下面咱们就开始进行讲解: 首先到apache官方网下载apache-cxf-2.2.2,地址:/ 新建一个Java Project,导入cxf常用.jar包 Java代码 1. commons-logging-1.1.1.jar 2. geronimo-activation_1.1_spec-1.0.2.jar(orSunsActivationjar) 3. geronimo-annotation_1.0_spec-1.1.1.jar(JSR250) 4. geronimo-javamail_1.4_spec-1.6.jar(orSunsJavaMailjar) 5. geronimo-servlet_2.5_spec-1.2.jar(orSunsServletjar) 6. geronimo-ws-metadata_2.0_spec-1.1.2.jar(JSR181) 7. geronimo-jaxws_2.1_spec-1.0.jar(orSunsjaxws-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 commons-logging-1.1.1.jar geronimo-activation_1.1_spec-1.0.2.jar (or Suns Activation jar) geronimo-annotation_1.0_spec-1.1.1.jar (JSR 250) geronimo-javamail_1.4_spec-1.6.jar (or Suns JavaMail jar) geronimo-servlet_2.5_spec-1.2.jar (or Suns Servlet jar) geronimo-ws-metadata_2.0_spec-1.1.2.jar (JSR 181) geronimo-jaxws_2.1_spec-1.0.jar (or Suns jaxws-api-2.1.jar) geronimo-stax-api_1.0_spec-1.0.1.jar (or other stax-api jar) jaxb-api-2.1.jar jaxb-impl-2.1.12.jar jetty-6.1.21.jar jetty-util-6.1.21.jar neethi-2.0.4.jar saaj-api-1.3.jar saaj-impl-1.3.2.jar wsdl4j-1.6.2.jar wstx-asl-3.2.8.jar XmlSchema-1.4.5.jar xml-resolver-1.2.jar cxf-2.2.2.jar 接下就是HelloWorld Demo开发了 第一步:新建一个webservice接口 Java代码 1. WebService2. publicinterfaceIHelloWorld 3. /WebParam给参数命名,提高可代码可读性。此项可选 4. blicStringsayHi(WebParam(name=text)Stringtext); 5. WebService public interface IHelloWorld /WebParam给参数命名,提高可代码可读性。此项可选public String sayHi(WebParam(name=text) String text); 通过注解WebService申明为webservice接口 第二步,实现WebService接口 Java代码 1. WebService2. publicclassHelloWorldImplimplementsIHelloWorld 3. 4. publicStringsayHi(Stringname) 5. System.out.println(sayHelloiscalledby+name); 6. returnHello+name; 7. 8. 9. WebService public class HelloWorldImpl implements IHelloWorld public String sayHi(String name) System.out.println(sayHello is called by + name);return Hello + name; 第三步,创建服务端 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(Stringargs)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. public class Server private Server()IHelloWorld helloWorld = new HelloWorldImpl();/创建WebService服务工厂JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();/注册WebService接口factory.setServiceClass(IHelloWorld.class);/发布接口factory.setAddress(http:/localhost:9000/HelloWorld);factory.setServiceBean(helloWorld);/创建WebServicefactory.create();public static void main(String args) throws InterruptedException /启动服务端 new Server();System.out.println(Server ready.);/休眠一分钟,便于测试 Thread.sleep(1000*60);System.out.println(Server exit.);System.exit(0); 第四步,创建客户端 Java代码 1. publicclassClient 2. 3. privateClient(); 4. 5. publicstaticvoidmain(Stringargs) 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. public class Client private Client();public static void main(String args)/创建WebService客户端代理工厂JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();/注册WebService接口factory.setServiceClass(HelloWorld.class);/设置WebService地址factory.setAddress(http:/localhost:9000/HelloWorld);IHelloWorld iHelloWorld = (IHelloWorld)factory.create();System.out.println(invoke webservice.);System.out.println(message context is:+iHelloWorld.sayHi( Josen);System.exit(0); 最后是万事俱备,只欠测试了 首先,运行服务端程序 其次,打开浏览器,在地址栏中输入http:/localhost:9000/HelloWorld?wsdl(因为cxf自带了一个jetty服务器),查看接口是否发布成功,如里浏览器页面显示下面内容,证明接口发布成功 Java代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 最后,运行客户端程序,看看效果如果。 这一节就讲到此为止,下节对WSDL定义进行讲解,便于对上面这个Demo进行很好的消化,同时对后面章节启个辅塾作用。WebService CXF学习(入门篇3):WSDL描述由于网上有很多相关这方面的资料,在这里我就转载/developerworks/cn/webservices/ws-wsdl/index.html一篇,不再重新讲述了。 本文初步介绍了Web Service stack中对于Web服务即时装配,自动集成起着关键作用的WSDL规范,首先介绍了WSDL的作用和意义,其次对WSDL文档的结构作出概要地介绍,对每个元素的作用作了探讨,分析了其开放和复用的体系设计的思想,最后通过一个实例详细说明了WSDL的工作模式。 本文所引用的资源主要包括两类,一类是Web服务的技术资源网站,包含了大量Web服务的技术信息,另一类是Web服务“stack系列技术规范,他们是一个整体的技术体系,包括UDDI、SOAP、WSDL、XML等。本文的最后给出了这些资源的链接,有兴趣的读者可以通过这些资源链接找到所需的内容。 Web Service Stack 在我的先前的文章中,我已经介绍过Web服务的整个技术体系Web Service stack,如下图: Figure 1. Web Service stack 其中,绿色部分是先前已经定义好的并且广泛使用的传输层和网络层的标准:IP、HTTP、SMTP等。而蓝色部分是目前开发的Web服务的相关标准协议,包括服务调用协议SOAP、服务描述协议WSDL和服务发现/集成协议UDDI,以及服务工作流描述语言WSFL。而橙色部分描述的是更高层的待开发的关于路由、可靠性以及事务等方面的协议。黄色部分是各个协议层的公用机制,这些机制一般由外部的正交机制来完成。 其中,一个可以使用的Web服务应当按照需要选用若干层次的功能,而无需所有的特性。但是无论如何为了实现一个一般意义上的Web服务,具备Web服务的基础特性:跨平台调用和接口可机器识别,那么必需使用WSDL和SOAP。SOAP是用来最终完成Web服务调用的,而WSDL则是用于描述如何使用 SOAP来调用Web服务的。 WSDL 是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。 在具体使用中,我们可以对 WSDL 进行扩展(类似SOAP的可扩展性),这样无论通信时使用何种消息格式或网络协议,都可以对服务访问点及其使用的消息格式进行描述。在WSDL的框架中,可以使用任意的消息格式和网络协议,如同SOAP中可以使用任意的网络协议一样。在WSDL规范中,定义了如何使用SOAP消息格式、HTTP GET/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 - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。 * Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。 * Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。 * PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。 * Binding - 特定端口类型的具体协议和数据格式规范的绑定。 * Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。 * Service - 相关服务访问点的集合。 大家可以参考下图,来理解一下WSDL文档的结构组织: Figure 2. WSDL元素的对象结构示意图 其中,Types是一个数据类型定义的容器,包含了所有在消息定义中需要的XML元素的类型定义,我将在今后的文章中结合XML Schema来详细说明如何进行类型定义。 Message具体定义了在通信中使用的消息的数据结构,Message元素包含了一组Part元素,每个Part元素都是最终消息的一个组成部分,每个 Part都会引用一个DataType来表示它的结构。Part元素不支持嵌套(可以使用DataType来完成这方面的需要),都是并列出现。 PortType具体定义了一种服务访问入口的类型,何谓访问入口的类型呢?就是传入/传出消息的模式及其格式。一个PortType可以包含若干个 Operation,而一个Operation则是指访问入口支持的一种类型的调用。在WSDL里面支持四种访问入口调用的模式: 1. 单请求; 2. 单响应; 3. 请求/响应; 4. 响应/请求。 在这里请求指的是从客户端到Web服务端,而响应指的是从Web服务端到客户端。PortType的定义中会引用消息定义部分的一个到两个消息,作为请求或响应消息的格式。比如,一个股票查询的访问入口可能就会支持两种请求消息,一种请求消息中指明股票代码,而另一种请求消息中则会指明股票的名称,响应消息可能都是股票的价格等等。 以上三种结构描述了调用Web服务的抽象定义,这三部分与具体Web服务部署细节无关,是可复用的描述(每个层次都可以复用)。如果与一般的对象语言做比较的话,这部分可以堪称是IDL描述的对象,描述了对象的接口标准,但是到底对象是用哪种语言实现,遵从哪种平台的细节规范,被部署在哪台机器上则是后面的元素所描述的。 Service描述的是一个具体的被部署的Web服务所提供的所有访问入口的部署细节,一个Service往往会包含多个服务访问入口,而每个访问入口都会使用一个Port元素来描述。 Port描述的是一个服务访问入口的部署细节,包括通过哪个Web地址(URL)来访问,应当使用怎样的消息调用模式来访问等。其中消息调用模式则是使用Binding结构来表示。 Binding结构定义了某个PortType与某一种具体的网络传输协议或消息传输协议相绑定,从这一层次开始,描述的内容就与具体服务的部署相关了。比如可以将PortType与SOAP/HTTP绑定,也可以将PortType与MIME/SMTP相绑定等。 在介绍了WSDL的主要元素之后,大家会发现,WSDL的设计理念完全继承了以XML为基础的当代Web技术标准的一贯设计理念:开放。WSDL允许通过扩展使用其他的类型定义语言(不光是XML Schema),允许
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江省乐清外国语学院2025年数学高三第一学期期末质量跟踪监视模拟试题
- 新疆乌鲁木齐七十中2025年高三数学第一学期期末统考试题
- 内蒙古五原县第一中学2025年数学高三第一学期期末监测试题
- 三年级下册语文测试卷及答案
- 养生固本健康人生李秀春讲课文档
- 2025昆明市官渡区曙光小学珥季路校区聘用制教师招聘(7人)备考练习试题及答案解析
- 2025四川乐山市峨眉山市医疗卫生辅助岗招募25人备考练习题库及答案解析
- 医药商品购销员(药品购销员)考试题(含答案)
- AR位置服务系统-洞察及研究
- 2025内蒙古赤峰宁城县鸿蒙高级中学招聘23人备考练习试题及答案解析
- 高中艺术特长生合同协议
- 要素式强制执行申请书(申请执行用)
- 慢性根尖周炎病例汇报
- 2025年秋数学(新)人教版三年级上课件:第1课时 几分之一
- 公司项目谋划管理办法
- 2025年职业指导师考试试卷:职业指导师专业能力
- 小学英语人教版四年级下册 巩固强化练(含答案)
- 防暴器材使用管理办法
- 2025-2026学年粤教粤科版(2024)小学科学二年级上册(全册)教学设计(附目录)
- 钢梁步履式顶推技术规范
- 新建寿县生态陵园(殡仪馆和公墓)规划选址论证、可研报告编制以及初步设
评论
0/150
提交评论