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
MyEclipse6Java开发中文教程 调试 Java web service实现 152基于代码方式创建 Web service项目 从 MyEclipse50起引入了一种新的项目名为 Web Services Project。这种项目对 MyEclipse Web Project进行了扩展,来支持更多的概念包括 web services配置,开发和 发布。本节内容将会展示如何使用 MyEclipse Web Services Project向导来创建和配置新 的 web service项目。我们将会进行下列步骤的操作 创建 Web Services Project 在项目的 web. xm|文件中配置 XFire Servlet ●创建 XFire配置文件 services. xml 将 MyEclipse-XFire类库添加到项目的构造路径中 ·在项目文件 project中添加特殊的 MyEclipse web项目构造器,这样能够发布项 目时自动将文件 services. xm发布到正确的位 New>Web Service Project,稍后即可启动创建项目的向导对话框。注意不要选成创建 Web Project 的菜单项。 2在第一页完成 Web Project信息的设置然后选择Next按钮继续 在弹出的对话框的 Project Name中输入 Helloworld service,然后选中J2 EE Specification Level下面的 Java ee50单选钮,接着点击对话框底部的Next按钮进入下一页。此页设 置如图154所示。 3.在向导的第二页可以设置 XFire servlet和 service. xm配置文件的详细信息。可以 完全保持默认值然后点击Next按钮进入最后一页的设置即可。 XFre这个 Servlet专门用来根据 servIce. Xn中的配置来生成WSDL并提供 Web service 服务功能,而且支持多种整合方式,例如在 Servlet class下面有五种可以选择的: a)org.codehaus.xfire.transporthttpXfireConfigurableServlet b)org.codehaus.xfire.transporthttpXfireServlet c)org.codehaus xfire loom. oomXFireServlet 刘长炯著
MyEclipse 6 Java 开发中文教程 6 刘长炯著 • 调试 Java web service 实现 15.2 基于代码方式创建 Web Service 项目 从 MyEclipse 5.0 起引入了一种新的项目名为 Web Services Project。这种项目对 MyEclipse Web Project 进行了扩展,来支持更多的概念包括 web services 配置,开发和 发布。本节内容将会展示如何使用 MyEclipse Web Services Project 向导来创建和配置新 的 web service 项目。我们将会进行下列步骤的操作: z 创建 Web Services Project z 在项目的 web.xml 文件中配置 XFire Servlet z 创建 XFire 配置文件 services.xml z 将 MyEclipse-XFire 类库添加到项目的构造路径中 z 在项目文件.project 中添加特殊的 MyEclipse web 项目构造器,这样能够发布项 目时自动将文件 services.xml 发布到正确的位置,例如: /WEB-INF/classes/META-INF/xfire/ z 创建 Web Service 客户端 15.2.1 系统需求 本章内容的练习仅需要 MyEclipse 6 即可,测试发布时需要 Tomcat 服务器。另外必须 使用 1.5 或者更高版本的 JDK,并且项目的编译版本需要设置成 Java 5 或者更高。 15.2.2 创建 HelloWorldService 项目 首先要启动 Web Service Project 向导。该向导由三个页面组成,第一页设置 Web 项目配置的详细信息;第二页设置 XFire 的配置详细信息;第三页配置需要添加到项目构造 路径中的 XFire 类库。 1. 启动 Web Services Project 向导 首先确保使用的透视图是 MyEclipse Java Enterprise,接着选择菜单 File > New > Web Service Project,稍后即可启动创建项目的向导对话框。注意不要选成创建 Web Project 的菜单项。 2. 在第一页完成 Web Project 信息的设置然后选择 Next 按钮继续 在弹出的对话框的Project Name中输入HelloWorldService,然后选中J2EE Specification Level 下面的 Java EE 5.0 单选钮,接着点击对话框底部的 Next 按钮进入下一页。此页设 置如图 15.4 所示。 3. 在向导的第二页可以设置 XFire servlet 和 service.xml 配置文件的详细信息。 可以 完全保持默认值然后点击 Next 按钮进入最后一页的设置即可。 XFire 这个 Servlet 专门用来根据 service.xml 中的配置来生成 WSDL 并提供 Web Service 服务功能,而且支持多种整合方式,例如在 Servlet class 下面有五种可以选择的: a) org.codehaus.xfire.transport.http.XFireConfigurableServlet b) org.codehaus.xfire.transport.http.XFireServlet c) org.codehaus.xfire.loom.LoomXFireServlet
MyEclipse6Java开发中文教程 d)org.codehaus xfire plexus. PlexusXFire Servlet e)org.codehausxfire spring XFire SpringServlet 分别支持不同类型的 Web service整合策略,不过默认情况下是和 Spring整合的。此页 的设置如图155所示。同时在这一页还可以修改的有配置文件目录和配置文件名字 a Hew Web Services Project New Web Service Project New web service project creati on details Web Project Details Project Name HelloworldService cati on 回 Use default1 ocation Directory E: \ workspace \HelloWorldservice Source folder src Web root folder WebRoot Context root URL /Helloworldservice J2EE Specificati on Level ⊙ Java EE5.0○J2E1.4○JzE21.3 图154新建 Web service项目向导的第一页设置 Hew eb Services Project 回区 New Web Services Project Create xfire servlet and services, xml Create fire servlet ervlet name Fireservlet Servletclass:orgcodehaus.xfire,transporthttpXFIreconFigurableservlety Servlet mapping: services/* Fire Web Services Confi guration Configuration Folder WebServices Configuration File Name: services. xml 图155新建 Web Service项目向导的第二页: XFire Servlet和 service.xml 4.向导的第三页是选择添加到项目构造路径中的类库。我们可以根据实际自己的需要 来添加类库。不过默认情况下必须选中 XFire Core Library,除非你想自己下载XFie 类库然后手工加入。如果计划开发一个使用 XFire的客户端应用,那么还需要选中 XfirehttpclientLibraries 向导结束后这些类库将会添加到项目的构造路径中去,不会复制任何JAR文件到项目的目 录中。按照图156那样进行设置,最后点击 Finish按钮结束向导 稍等片刻后,项目就创建完成了。图157展示了新创建好的Web服务项目的目录结构 刘长炯著
MyEclipse 6 Java 开发中文教程 7 刘长炯著 d) org.codehaus.xfire.plexus.PlexusXFireServlet e) org.codehaus.xfire.spring.XFireSpringServlet 。分别支持不同类型的 Web Service 整合策略,不过默认情况下是和 Spring 整合的。此页 的设置如图 15.5 所示。同时在这一页还可以修改的有配置文件目录和配置文件名字。 图 15.4 新建 Web Service 项目向导的第一页设置 图 15.5 新建 Web Service 项目向导的第二页:XFire Servlet 和 service.xml 4. 向导的第三页是选择添加到项目构造路径中的类库。我们可以根据实际自己的需要 来添加类库。不过默认情况下必须选中 XFire Core Library,除非你想自己下载 XFire 类库然后手工加入。如果计划开发一个使用 XFire 的客户端应用,那么还需要选中 XFire HTTP Client Libraries。 向导结束后这些类库将会添加到项目的构造路径中去,不会复制任何 JAR 文件到项目的目 录中。按照图 15.6 那样进行设置,最后点击 Finish 按钮结束向导。 稍等片刻后,项目就创建完成了。图 15.7 展示了新创建好的 Web 服务项目的目录结构
MyEclipse6Java开发中文教程 可以注意到这个项目和标准的 MyEclipse Web项目的结构非常的像,只是额外加了些 XFire 的配置信息。 d Rev eb Services Project project Library Configuration Add MyEclipse XFire and User libraries to project Select the libraries to add to project buildpath Show:回 MyEclipse Libraries□ User Libraries XFire 1.2 Core Libraries - d XFire 1.2 XMLBeans Libraries - MyEclipse-Library> J XFire 1.2 Security Libraries-MyEclipse-Library> View and edit libraries 图156向导最后一页的设置信息《 d HelloWorldservice bs +)E JRE System Library [MyEclipse60] +)E Java EE 5 Librari t-a XFire 1.2 Core Libraries 冒 eboot +-C META-INF 日@WEB-工F web. xml 日 WebServices 图157 Web service项目的目录结构 接下来让我们看看 web. xm的代码清单: XFireServlet org. codehaus xfire spring. XFireSpring Servlet 0 刘长炯著
MyEclipse 6 Java 开发中文教程 8 刘长炯著 可以注意到这个项目和标准的 MyEclipse Web 项目的结构非常的像,只是额外加了些 XFire 的配置信息。 图 15.6 向导最后一页的设置信息 图 15.7 Web Service 项目的目录结构 接下来让我们看看 web.xml 的代码清单: XFireServlet org.codehaus.xfire.spring.XFireSpringServlet 0
MyEclipse6Java开发中文教程 XFireServlet /services/* index. jsp 。此文件定义了一个监听地址为/ services/的Web服务监听地址,将来的Web服务都会发 布到这个子目录下。再来看看 services. xm的代码清单: 。其实,这是一个和 Spring的配置文件很相似的结构。 1523创建 Web service 本小节将创建一个简单的 Web service。首先,需要启动创建 Web service的向导。点 击工具栏上的碰新建 Web service按钮,即可启动向导。或者选择菜单Fie>New > Other.,在New对话框中展开 MyEclipse> Web services> Web service,之后也可 以启动创建向导。启动的向导对话框第一页如图158所示。在这一页有两种开发模式 种是从底到上的,也就是从 Java bean生成的方式;另一种则是从顶到下的,从WSDL文 档生成的方式。那么本例中选中单选钮 Create web service from java bean并选中复选 框 Create new Java bean,然后点击Next按钮进入第二页的设置。因为手工编写WSDL 文件相当的困难,所以对于Java开发人员来说使用第一种方式比较简便, Hey eb Service 回囟 New Web Service Web services project: HelloworldService Web Service Creation scenario Create web service from Java bean (Bottom-up scenario) 回 Create new Java bean CReate web service from WSDL document (Top-down scenario ⑦ < Back Next EinishCancel 图158新建 Web service向导第一页 在第二页,用来设置 Web Service的详细信息,这一页需要修改的地方。第一个是在 刘长炯著
MyEclipse 6 Java 开发中文教程 9 刘长炯著 XFireServlet /services/* index.jsp 。此文件定义了一个监听地址为/services/*的 Web 服务监听地址,将来的 Web 服务都会发 布到这个子目录下。再来看看 services.xml 的代码清单: 。其实,这是一个和 Spring 的配置文件很相似的结构。 15.2.3 创建 Web Service 本小节将创建一个简单的 Web Service。首先,需要启动创建 Web Service 的向导。点 击工具栏上的 新建 Web Service 按钮,即可启动向导。或者选择菜单 File > New > Other...,在 New 对话框中展开 MyEclipse > Web Services > Web Service,之后也可 以启动创建向导。启动的向导对话框第一页如图 15.8 所示。在这一页有两种开发模式,一 种是从底到上的,也就是从 Java Bean 生成的方式;另一种则是从顶到下的,从 WSDL 文 档生成的方式。那么本例中选中单选钮 Create web service from Java bean 并选中复选 框 Create new Java bean,然后点击 Next 按钮进入第二页的设置。因为手工编写 WSDL 文件相当的困难,所以对于 Java 开发人员来说使用第一种方式比较简便。 图 15.8 新建 Web Service 向导第一页 在第二页,用来设置 Web Service 的详细信息,这一页需要修改的地方。第一个是在
MyEclipse6Java开发中文教程 Web service name:处输入 Helloworld,第二个地方是点击 Java package一行末尾的 New.按钮,在弹出的新建包对话框中输入 bellows,然后点击OK按钮返回(也可以直接 输入现有的包名)。这一页的其它地方包括设置Java源代码目录( Java source folder),以 及服务接口名( Service interface,会自动根据输入的服务名生成),服务实现类( Service impl cass),还有SOAP的风格( SOAP style/use)以及 Servlet的作用域( Servlet scope,可 用值包括app| ication, request, session)。当一切设置完毕后,点击 Finish按钮即可完成 向导并生成代码 Hey eb service New Web Service- Bottom-up Scenaric eb service from Ja Web service proiect: HelloWorldservice ervI ce nam HelloWorld Java Implementation Java source folder: src Java package bellows onse New Service interface:IHelloWorld Service impl. class: HelloWorldImpl SOAP Servlet Confi gurati SOAP style/use: wrapped/literal 191点击此接按钮输入包 图159新建Web服务向导第二页 此时我们看看所发生的变化,首先是 services. xM发生了改变: beansxmlns="http://xfire.codehaus.org/config/1.0"> Helloworld/name> bellows. /Hello world implementation class> hellos. HelloworldImpl wrapped litera/ application 这就给了我们一种提示,那就是我们可以自己手工修改这个文件来加入更多的Web Service,无非就是需要一个接口和一个实现类,然后在此配置文件中加入更多的 service 标签即可。再来看看在src/ bellows目录下多了两个Java类,分别是 Helloworlo和 Helloworld。源代码非常简单,先看接口 THelloworld 刘长炯著
MyEclipse 6 Java 开发中文教程 10 刘长炯著 Web service name:处输入 HelloWorld,第二个地方是点击 Java package 一行末尾的 New...按钮,在弹出的新建包对话框中输入 hellows,然后点击 OK 按钮返回(也可以直接 输入现有的包名)。这一页的其它地方包括设置 Java 源代码目录(Java source folder),以 及服务接口名(Service interface,会自动根据输入的服务名生成),服务实现类(Service impl. class),还有 SOAP 的风格(SOAP style/use)以及 Servlet 的作用域(Servlet scope,可 用值包括 application,request,session)。当一切设置完毕后,点击 Finish 按钮即可完成 向导并生成代码。 图 15.9 新建 Web 服务向导第二页 此时我们看看所发生的变化,首先是 services.xml 发生了改变: HelloWorld hellows.IHelloWorld hellows.HelloWorldImpl wrapped literal application 。这就给了我们一种提示,那就是我们可以自己手工修改这个文件来加入更多的 Web Service,无非就是需要一个接口和一个实现类,然后在此配置文件中加入更多的 service 标签即可。再来看看在 src/hellows 目录下多了两个 Java 类,分别是 IHelloWorld 和 HelloWorld。源代码非常简单,先看接口 IHelloWorld: