MyEclipse6Java开发中文教程 第十五章开发 XFire Web service应用 第十五章开发 XFire Web Service应用 151介绍 1511 Web service简介 1512 XFire Java soaP框架一览 1513 MyEclipse的 Web service工具简介 152基于代码方式创建 Web service项目 1521系统需求 1522创建 Helloworld service项目 1523创建 Web service 1524发布运行项目,显示WSDL 45666913 1525用 Web Service Explorer测试 1526创建Java测试客户端 152.7给现有Web项目加入 Web Service开发功能 153创建单独的客户端项目 1531创建天气预报客户端 WeatherWsclient项 1532创建 Web service Client,从WSDL生成客户端代码.… 1533编写运行测试代码 154JSR181标注方式Web服务开发 25 1541XFie的标注服务开发 1542JB0ss下的标注服务开发 155可视化创建、修改WSDL 156常见问题 1510小结 1511参考资料 151介绍 1511 Web Service简介 Web service(中文一般译作Web服务,或者直接就保持原来的英文词汇不变)是什 么?它是一项最早主要由微软和BM提出的技术规范。 Web service的服务描述囊括了与 服务交互需要的全部细节,包括消息格式,传输协议等,该接口隐藏了服务实现的细节,允 许通过独立于服务实现,独立于硬件或者软件平台,独立于编程语言的方式使用服务。这使 得基于 Web services的应用程序具备松散耦合,面向组件和跨技术实现的特点。Web Service可以被设计来履行一项或一组特定的任务,可以单独或与其他 Web service一起用 于实现复杂的聚集或商业交易,构建复杂的 Web Service网络。这是官方的定义。那么其 刘长炯著
MyEclipse 6 Java 开发中文教程 1 刘长炯著 第十五章 开发 XFire Web Service 应用 第十五章 开发XFire Web Service应用.............................................................................. 1 15.1 介绍................................................................................................................... 1 15.1.1 Web Service 简介.................................................................................... 1 15.1.2 XFire Java SOAP 框架一览..................................................................... 4 15.1.3 MyEclipse 的Web Service 工具简介....................................................... 5 15.2 基于代码方式创建Web Service项目 .................................................................. 6 15.2.1 系统需求.................................................................................................. 6 15.2.2 创建 HelloWorldService 项目................................................................. 6 15.2.3 创建Web Service..................................................................................... 9 15.2.4 发布运行项目, 显示 WSDL ...................................................................11 15.2.5 用 Web Service Explorer 测试............................................................. 13 15.2.6 创建Java测试客户端 ............................................................................. 15 15.2.7 给现有Web项目加入Web Service开发功能............................................ 17 15.3 创建单独的客户端项目 .................................................................................... 17 15.3.1 创建天气预报客户端WeatherWSClient项目 .......................................... 18 15.3.2 创建Web Service Client,从 WSDL生成客户端代码............................... 18 15.3.3 编写运行测试代码 ................................................................................. 20 15.4 JSR 181 标注方式 Web 服务开发.................................................................. 25 15.4.1 XFire的标注服务开发 ............................................................................. 25 15.4.2 JBoss下的标注服务开发 ........................................................................ 27 15.5 可视化创建、修改WSDL ................................................................................. 30 15.6 常见问题........................................................................................................... 33 15.10 小结............................................................................................................... 35 15.11 参考资料........................................................................................................ 35 15.1 介绍 15.1.1 Web Service 简介 Web Service(中文一般译作 Web 服务,或者直接就保持原来的英文词汇不变)是什 么?它是一项最早主要由微软和 IBM 提出的技术规范。Web Service 的服务描述囊括了与 服务交互需要的全部细节,包括消息格式,传输协议等,该接口隐藏了服务实现的细节,允 许通过独立于服务实现,独立于硬件或者软件平台,独立于编程语言的方式使用服务。这使 得基于 Web Services 的应用程序具备松散耦合,面向组件和跨技术实现的特点。Web Service 可以被设计来履行一项或一组特定的任务,可以单独或与其他 Web Service 一起用 于实现复杂的聚集或商业交易,构建复杂的 Web Service 网络。这是官方的定义。那么其
MyEclipse6Java开发中文教程 实主要的问题,还是为了解决开发语言过多,互相之间无法方便的进行调用的困难,希望用 种大家都认可的方式实现网络功能的互联互通。如果读者去 Google搜索这个词,那将会 得到很多不同的答案,甚至是模糊不清的定义。而它,却是现在热炒的面向服务的体系结构 (SOA, Service Oriented Architecture)的基石,SOA强调的重点是Web服务。那么, 到底什么是Web服务?答案也许很简单:一种中间技术层(或称中间件)。 我们来举一个简单的例子,大家都知道中国人懂日文的比较少,而日本人懂中文的也比 较少,假设现在日本人开了个日本面馆,提供各种面例如炸酱面,石锅面等等,而且他想提 供服务给全球各地的客户,让他们都能看懂提供的服务,并自己点面。那么是否这个日本人 就需要学习全球各地的语言,然后挂上50种语言的面单,之后接待50种不同语言的人呢 其实不用那么复杂,大家只需要妥协一下,都采用中间语言:英语来交流就行了提供的菜 单使用英文,而大家点面也使用英文,服务员通告服务结果也用英文,这样这个矛盾就解决 了。当然来吃饭的客户私下里如何评价面,或者如何称呼面,而日本服务员是否需要用英文 来通知厨房师傅来做饭,这都不是大家所关心的问题,大家所关心的就是:看菜单,点面, 吃到面,这样一个结果而已。此过程如图151所示。再此过程中,英语就扮演了一个中间 交互层标注协议的角色,双方都遵守它,就可以实现国际化的互联互通的服务。 中国客户 Menu ZJM(炸酱面) SGM(石锅面)下提供服务 日本面馆 Give me ZJM! 韩国客户 日本服务员 ZJM is OK! 151日本面馆用英文解决国际化服务问题 好了现在引用一些资料来简介 Web Service:“从表面上看, Web Service就是一个 应用程序,它向外界暴露岀一个能够通过wveb进行调用的APl。这就是说,你能够用编程 的方法通过Web调用来实现某个功能的应用程序。例如,可以创建一个 Web Service,它 的作用是查询某公司某员工的基本信息。它接受该员工的编号作为查询字符串,返回该员工 的具体信息。你可以在浏览器的地址栏中直接输入 Http Get请求来调用罗列该员工基本 信息的ASP页面,这就可以算作是体验 Web service了 模块化的应用,可以在网络通常为Web)中被描述、发布、查找以及通过WB述 从深层次上看, Web service是一种新的Web应用程序分支,它们是自包含、自描 Web service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的 技术规范,这些规范使得 Web service能与其他兼容的组件进行互操作。它可以使用标准 的互联网协议,像超文本传输协议HTTP和XML,将功能体现在互联网和企业内部网上。 2 刘长炯著
MyEclipse 6 Java 开发中文教程 2 刘长炯著 实主要的问题,还是为了解决开发语言过多,互相之间无法方便的进行调用的困难,希望用 一种大家都认可的方式实现网络功能的互联互通。如果读者去 Google 搜索这个词,那将会 得到很多不同的答案,甚至是模糊不清的定义。而它,却是现在热炒的面向服务的体系结构 (SOA,Service Oriented Architecture)的基石,SOA 强调的重点是 Web 服务。那么, 到底什么是 Web 服务?答案也许很简单:一种中间技术层(或称中间件)。 我们来举一个简单的例子,大家都知道中国人懂日文的比较少,而日本人懂中文的也比 较少,假设现在日本人开了个日本面馆,提供各种面例如炸酱面,石锅面等等,而且他想提 供服务给全球各地的客户,让他们都能看懂提供的服务,并自己点面。那么是否这个日本人 就需要学习全球各地的语言,然后挂上 50 种语言的面单,之后接待 50 种不同语言的人呢? 其实不用那么复杂,大家只需要妥协一下,都采用中间语言:英语来交流就行了。提供的菜 单使用英文,而大家点面也使用英文,服务员通告服务结果也用英文,这样这个矛盾就解决 了。当然来吃饭的客户私下里如何评价面,或者如何称呼面,而日本服务员是否需要用英文 来通知厨房师傅来做饭,这都不是大家所关心的问题,大家所关心的就是:看菜单,点面, 吃到面,这样一个结果而已。此过程如图 15.1 所示。再此过程中,英语就扮演了一个中间 交互层标注协议的角色,双方都遵守它,就可以实现国际化的互联互通的服务。 15.1 日本面馆用英文解决国际化服务问题 好了,现在引用一些资料来简介 Web Service:“从表面上看,Web Service 就是一个 应用程序,它向外界暴露出一个能够通过 Web 进行调用的 API。这就是说,你能够用编程 的方法通过 Web 调用来实现某个功能的应用程序。例如,可以创建一个 Web Service,它 的作用是查询某公司某员工的基本信息。它接受该员工的编号作为查询字符串,返回该员工 的具体信息。你可以在浏览器的地址栏中直接输入 HTTP GET 请求来调用罗列该员工基本 信息的 ASP 页面,这就可以算作是体验 Web Service 了。 从深层次上看,Web Service 是一种新的 Web 应用程序分支,它们是自包含、自描述、 模块化的应用,可以在网络(通常为 Web)中被描述、发布、查找以及通过 Web 来调用。 Web Service 便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的 技术规范,这些规范使得 Web Service 能与其他兼容的组件进行互操作。它可以使用标准 的互联网协议,像超文本传输协议 HTTP 和 XML,将功能体现在互联网和企业内部网上
MyEclipse6Java开发中文教程 Web service平台是一套标准,它定义了应用程序如何在web上实现互操作性。你可以用 你喜欢的任何语言,在你喜欢的任何平台上写 Web service 我想,看到这定义的人都会感到一头雾水,不知所谓。那么好了,看图152中的Web 服务结构图吧。在这个图中,列出了 Web service的几个关键部分。包括 简单对象访问协议(SOAP, Simple Object Access Protocol) Web服务描述语言(WsDL, Web Service Definition Language) 统一描述、发现和集成(UDDl, Universal Description, Discovery, and Integration 」描述信息 UDD注册表 WsDL(服务描 述语言) 指向服务 描述服务 查找服务 调用服务 Web service Web service服 客户端 SOAP消息(通过HTP交换XML)米务器端(Jaa (Jaa.NET等) NET等) 图152 Web service结构图 现在,让我们把它和图15.1的就餐过程进行类比。假设我们在路上饥肠辘辘,忽然, 眼前一亮,前面出现一指示牌:前方500米处有就餐服务,详情请去店内咨询。这是什么? 这就是UDD,它告诉您在什么位置有什么样的Web服务,但是很显然服务的细节是不会 贴在指示牌上的,需要你亲自去店内查看。到了店内,您最关心的内容就是菜单,也就是 WsDL,它会描述每种菜的特点和定价,您根据自己的情况,来选择打算吃那种菜(当然, 这里是国际标准的菜单描述格式)。然后,您用英文,一种大家都听得懂的语言,来向服务 员表明您的希望,当然,内容必须是和菜单有关的内容,您不能向服务员说:请问一只轮胎 多少钱?这就是SOAP所做的事,您必须用XML协议来表达您在WSDL上看到的服务项 目。服务员听到兵翻译成自己能理解的内容后根据实际情况作出反应:很好,某某菜一会 就做好;或者不幸的是:对不起,这道菜原料用完了,请换一道。同样,它也用SOAP 您返回结果。这就是Web服务的过程,不过在计算机的世界里,客户端成了某电脑上的程 序(可以用各种语言开发),服务器端则是某台运行HTTP并支持Webservice服务的服务 器程序。因此,问题也潜在存在,那些无法写上菜单的服务项,是无法通过这种途径来传播 的,换句话说web服务只能在一定范围内实现互联互通,所以它无法取代现有的其它沟通 途径,例如QQ和MSN。最后,UDD|的出发点很好,不过在企业内部,因为WSDL唾手 可得,所以没有人愿意再去公司大院里竖起一块牌子列出本公司都有哪些Web服务,所以 UDD|在企业内部使用时,是几乎用不到的。那么,Web服务能做什么?可以查股票,天气 预报等这些类似于一问一答的服务。 现在Java的最新版,包括JDK6和 Java ee5,都对Web服务提供了很完整的支持 现在的开发者已经很少再需要去详细的了解SOAP和WSDL的详细格式,一般来说大家通 过可视化的设计器或者开发工具,就可以很快的实现一个Web服务,包括生成服务器端代 码和客户端代码等等。例如 Java eE5使用标注显著改进和简化了Web服务支持,而JDK 刘长炯著
MyEclipse 6 Java 开发中文教程 3 刘长炯著 Web Service 平台是一套标准,它定义了应用程序如何在 Web 上实现互操作性。你可以用 你喜欢的任何语言,在你喜欢的任何平台上写 Web Service。” 我想,看到这定义的人都会感到一头雾水,不知所谓。那么好了,看图 15.2 中的 Web 服务结构图吧。在这个图中,列出了 Web Service 的几个关键部分。包括: z 简单对象访问协议(SOAP,Simple Object Access Protocol) z Web 服务描述语言(WSDL,Web Service Definition Language) z 统一描述、发现和集成(UDDI,Universal Description, Discovery, and Integration) 图 15.2 Web Service 结构图 现在,让我们把它和图 15.1 的就餐过程进行类比。假设我们在路上饥肠辘辘,忽然, 眼前一亮,前面出现一指示牌:前方 500 米处有就餐服务,详情请去店内咨询。这是什么? 这就是 UDDI,它告诉您在什么位置有什么样的 Web 服务,但是很显然服务的细节是不会 贴在指示牌上的,需要你亲自去店内查看。到了店内,您最关心的内容就是菜单,也就是 WSDL,它会描述每种菜的特点和定价,您根据自己的情况,来选择打算吃那种菜(当然, 这里是国际标准的菜单描述格式)。然后,您用英文,一种大家都听得懂的语言,来向服务 员表明您的希望,当然,内容必须是和菜单有关的内容,您不能向服务员说:请问一只轮胎 多少钱?这就是 SOAP 所做的事,您必须用 XML 协议来表达您在 WSDL 上看到的服务项 目。服务员听到后,翻译成自己能理解的内容后根据实际情况作出反应:很好,某某菜一会 就做好;或者不幸的是:对不起,这道菜原料用完了,请换一道。同样,它也用 SOAP 向 您返回结果。这就是 Web 服务的过程,不过在计算机的世界里,客户端成了某电脑上的程 序(可以用各种语言开发),服务器端则是某台运行 HTTP 并支持 Web Service 服务的服务 器程序。因此,问题也潜在存在,那些无法写上菜单的服务项,是无法通过这种途径来传播 的,换句话说 Web 服务只能在一定范围内实现互联互通,所以它无法取代现有的其它沟通 途径,例如 QQ 和 MSN。最后,UDDI 的出发点很好,不过在企业内部,因为 WSDL 唾手 可得,所以没有人愿意再去公司大院里竖起一块牌子列出本公司都有哪些 Web 服务,所以 UDDI 在企业内部使用时,是几乎用不到的。那么,Web 服务能做什么?可以查股票,天气 预报等这些类似于一问一答的服务。 现在 Java 的最新版,包括 JDK 6 和 Java EE 5,都对 Web 服务提供了很完整的支持。 现在的开发者已经很少再需要去详细的了解 SOAP 和 WSDL 的详细格式,一般来说大家通 过可视化的设计器或者开发工具,就可以很快的实现一个 Web 服务,包括生成服务器端代 码和客户端代码等等。例如 Java EE 5 使用标注显著改进和简化了 Web 服务支持,而 JDK
MyEclipse6Java开发中文教程 直接内置简化对 Web service的支持,同时 JAX-WS20是 Java eE5平台中用于 Web服务的新APl,保留了自然的RPC编程模型,同时在以下几个方面进行了改进:数 据绑定、协议和传输的独立性、对Web服务的REST样式的支持以及易开发性。下面是 个JDK6中的Web服务端的示例 import javax ws Web/ethod, import javax jws Web Service, import javax ws soap. SOAPBinding, ∥定义Web服务类和方法 @websErvice(targetnAmespace=http:/jdk.studyhermitorg/client) @SoAPBinding(style= SOAPBinding Style RPC) public class Hello f WebMethod public String sayHello(String name)i return " hello: + name ∥启动Web服务 import javax.xm/ ws Endpoint, public cla public static void main(StringI args)v 当前有很多主流IDE对Web服务的开发提供了完美的支持,例如商业软件 JBuilder中 有Web服务的可视化设计器和生成器,开源免费的 Netbeans6中也提供了同样的功能, 而 Eclipse则稍微弱一点,不过在 MyEclipse6中则提供了基于XFre的Web服务的开发支 持。 Spring框架则提供了这些支持:使用 JAX-RPC暴露服务;访问Web服务。一般的开 发过程是 1.开发普通的功能类 2.将其包装成Web服务,发布于服务器并生成WsDL描述 3.调用者根据WSDL生成客户端代码。 1512 XFire Java SOAP框架一览 XFie的官方网站地址是http:/xfire.codehaus.orgl,根据其网站的说 XFire is now CXF User's looking to use XFire on a new project, should use CXF instead. CXF is a continuation of the X Fire project and is considered XFire 2.0. It has many new features,a ton of bug fixes, and is now JAX-Ws compliant! XFire will continue to be maintained 刘长炯著
MyEclipse 6 Java 开发中文教程 4 刘长炯著 直接内置/简化对 Web Service 的支持,同时 JAX-WS 2.0 是 Java EE 5 平台中用于 Web 服务的新 API,保留了自然的 RPC 编程模型,同时在以下几个方面进行了改进:数 据绑定、协议和传输的独立性、对 Web 服务的 REST 样式的支持以及易开发性。下面是 一个 JDK 6 中的 Web 服务端的示例: import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; //定义 Web 服务类和方法 @WebService(targetNamespace = "http://jdk.study.hermit.org/client") @SOAPBinding(style = SOAPBinding.Style.RPC) public class Hello { @WebMethod public String sayHello(String name) { return "hello:" + name; } } // 启动 Web 服务 import javax.xml.ws.Endpoint; public class StartService { public static void main(String[] args) { Endpoint.publish("http://localhost:8080/HelloService", new Hello()); } } 。 当前有很多主流 IDE 对 Web 服务的开发提供了完美的支持,例如商业软件 JBuilder 中 有 Web 服务的可视化设计器和生成器,开源免费的 Netbeans 6 中也提供了同样的功能, 而 Eclipse 则稍微弱一点,不过在 MyEclipse 6 中则提供了基于 XFire 的 Web 服务的开发支 持。Spring 框架则提供了这些支持:使用 JAX-RPC 暴露服务;访问 Web 服务。一般的开 发过程是: 1. 开发普通的功能类; 2. 将其包装成 Web 服务,发布于服务器并生成 WSDL 描述; 3. 调用者根据 WSDL 生成客户端代码。 15.1.2 XFire Java SOAP 框架一览 XFire的官方网站地址是 http://xfire.codehaus.org/ ,根据其网站的说法:“ XFire is now CXF User's looking to use XFire on a new project, should use CXF instead. CXF is a continuation of the XFire project and is considered XFire 2.0. It has many new features, a ton of bug fixes, and is now JAX-WS compliant! XFire will continue to be maintained
MyEclipse6Java开发中文教程 through bug fix releases, but most development will occur on CXF now. For more information see the xFire/ce| tix merge FAQ and the CXF website.”可以看出有两处变动, 首先是新版本的XFe改名成了CXF,可以认为CXF就是XFie20,是其改进版本。那么 老的XFre项目只是停留在项目的Bug修正上,新功能都转向cXF。另外,CXF现在即将 成为 Apache的一个子项目。总之,它们都是开源项目,我们可以免费使用。图153是 XFire 的标志图。 FR∈ 图153XFie标志图 MyEclipse web service工具基于开源的 XFire Java soAP引擎构建。XFe是一款比 较少见的而且非常流行的厂商独立的SOAP引擎。 Codehaus XFire是面向服务的开发更 加简便,提供容易使用的AP|并支持标准。同时性能也非常高,因为使用了基于消耗内存 很少的SAX模型进行开发。其功能和目标包括 支持重要的 Web service标准-sOAP, WSDL, WS-I Basic Profile, WS-Addressing, WS-Security等等 高性能的SOAP栈 可插入式的绑定机制支持POJO, XMLBean,JAXB11,JAXB20和 Castor 支持JSR181AP1,可以在Java5ad14下配置Web服务( commons属性, JSR181语法) 支持多种传输协议- Http jmS,XMPP,nMVM等等 可嵌入的以及容易掌握的AP 支持 Spring,Pico, Plexus,Loom 支持JB( Java Business Integration,Java业务集成) 客户端和服务器端骨架代码生成 支持 JAX-WS体验版 笔者在开发的过程中注意到它基本上是利用Spng的代理机制进行工作的,也就是先开 发POJO的普通类,然后通过 Spring生成代理类,最后通过 XFire的核心 Servlet将其暴 露成了个Web服务。 151.3 My Eclipse的 Web service工具简介 Web service正在逐渐成为未来的跨平台跨系统跨网络,整合内外信息的∏解决方案 (其实就是现在提出的SOA)的核心技术。 MyEclipse的 web service开发功能提供了快 速开发测试 web service,以及轻量级的 web service容器。这些核心的功能包括: 从上层向下和从底层开始的 web service创建工具 用来测试 web service的 Web Service Explorer(Web服务浏览器) WsDL创建,编辑和验证工具,包括JsR-181Ws标注(Web服务标注) 创建 Web service项目,配置和检验 向任何 Java servlet24+容器发布 web service 刘长炯著
MyEclipse 6 Java 开发中文教程 5 刘长炯著 through bug fix releases, but most development will occur on CXF now. For more information see the XFire/Celtix merge FAQ and the CXF website.”可以看出有两处变动, 首先是新版本的 XFire 改名成了 CXF,可以认为 CXF 就是 XFire 2.0,是其改进版本。那么 老的 XFire 项目只是停留在项目的 Bug 修正上,新功能都转向 CXF。另外,CXF 现在即将 成为 Apache 的一个子项目。总之,它们都是开源项目,我们可以免费使用。图 15.3 是 XFire 的标志图。 图 15.3 XFire 标志图 MyEclipse web service 工具基于开源的 XFire Java SOAP 引擎构建。XFire 是一款比 较少见的而且非常流行的厂商独立的 SOAP 引擎。Codehaus XFire 是面向服务的开发更 加简便,提供容易使用的 API 并支持标准。同时性能也非常高,因为使用了基于消耗内存 很少的 StAX 模型进行开发。其功能和目标包括: • 支持重要的 Web Service 标 准 – SOAP , WSDL , WS-I Basic Profile, , WS-Addressing,WS-Security 等等 • 高性能的 SOAP 栈 • 可插入式的绑定机制支持 POJO,XMLBean,JAXB 1.1,JAXB 2.0 和 Castor • 支持 JSR 181 API ,可以在 Java 5 and 1.4 下配置 Web 服务(Commons 属性, JSR 181 语法) • 支持多种传输协议- HTTP, JMS, XMPP, In-JVM 等等 • 可嵌入的以及容易掌握的 API • 支持 Spring, Pico, Plexus,Loom • 支持 JBI(Java Business Integration,Java 业务集成) • 客户端和服务器端骨架代码生成 • 支持 JAX-WS 体验版 。笔者在开发的过程中注意到它基本上是利用 Spring 的代理机制进行工作的,也就是先开 发 POJO 的普通类,然后通过 Spring 生成代理类,最后通过 XFire 的核心 Servlet 将其暴 露成一个 Web 服务。 15.1.3 MyEclipse 的 Web Service 工具简介 Web service 正在逐渐成为未来的跨平台跨系统跨网络,整合内外信息的 IT 解决方案 (其实就是现在提出的 SOA)的核心技术。MyEclipse 的 web service 开发功能提供了快 速开发测试 web service,以及轻量级的 web service 容器。这些核心的功能包括: • 从上层向下和从底层开始的 web service 创建工具 • 用来测试 web service 的 Web Service Explorer(Web 服务浏览器) • WSDL 创建,编辑和验证工具,包括 JSR-181 WS 标注(Web 服务标注) • 创建 Web service 项目,配置和检验 • 向任何 Java servlet 2.4+ 容器发布 web service