MyEclipse6Java开发中文教程1刘长炯著第十五章开发XFireWebService应用第十五章开发XFireWebService应用..............................................................................115.1介绍...................................................................................................................115.1.1WebService简介....................................................................................115.1.2XFireJavaSOAP框架一览.....................................................................415.1.3MyEclipse的WebService工具简介.......................................................515.2基于代码方式创建WebService项目..................................................................615.2.1系统需求..................................................................................................615.2.2创建HelloWorldService项目.................................................................615.2.3创建WebService.....................................................................................915.2.4发布运行项目,显示WSDL...................................................................1115.2.5用WebServiceExplorer测试.............................................................1315.2.6创建Java测试客户端.............................................................................1515.2.7给现有Web项目加入WebService开发功能............................................1715.3创建单独的客户端项目....................................................................................1715.3.1创建天气预报客户端WeatherWSClient项目..........................................1815.3.2创建WebServiceClient,从WSDL生成客户端代码...............................1815.3.3编写运行测试代码.................................................................................2015.4JSR181标注方式Web服务开发..................................................................2515.4.1XFire的标注服务开发.............................................................................2515.4.2JBoss下的标注服务开发........................................................................2715.5可视化创建、修改WSDL.................................................................................3015.6常见问题...........................................................................................................3315.10小结...............................................................................................................3515.11参考资料........................................................................................................3515.1介绍15.1.1WebService简介WebService(中文一般译作Web服务,或者直接就保持原来的英文词汇不变)是什么?它是一项最早主要由微软和IBM提出的技术规范。WebService的服务描述囊括了与服务交互需要的全部细节,包括消息格式,传输协议等,该接口隐藏了服务实现的细节,允许通过独立于服务实现,独立于硬件或者软件平台,独立于编程语言的方式使用服务。这使得基于WebServices的应用程序具备松散耦合,面向组件和跨技术实现的特点。WebService可以被设计来履行一项或一组特定的任务,可以单独或与其他WebService一起用于实现复杂的聚集或商业交易,构建复杂的WebService网络。这是官方的定义。那么其MyEclipse6Java开发中文教程2刘长炯著实主要的问题,还是为了解决开发语言过多,互相之间无法方便的进行调用的困难,希望用一种大家都认可的方式实现网络功能的互联互通。如果读者去Google搜索这个词,那将会得到很多不同的答案,甚至是模糊不清的定义。而它,却是现在热炒的面向服务的体系结构(SOA,ServiceOrientedArchitecture)的基石,SOA强调的重点是Web服务。那么,到底什么是Web服务?答案也许很简单:一种中间技术层(或称中间件)。我们来举一个简单的例子,大家都知道中国人懂日文的比较少,而日本人懂中文的也比较少,假设现在日本人开了个日本面馆,提供各种面例如炸酱面,石锅面等等,而且他想提供服务给全球各地的客户,让他们都能看懂提供的服务,并自己点面。那么是否这个日本人就需要学习全球各地的语言,然后挂上50种语言的面单,之后接待50种不同语言的人呢?其实不用那么复杂,大家只需要妥协一下,都采用中间语言:英语来交流就行了。提供的菜单使用英文,而大家点面也使用英文,服务员通告服务结果也用英文,这样这个矛盾就解决了。当然来吃饭的客户私下里如何评价面,或者如何称呼面,而日本服务员是否需要用英文来通知厨房师傅来做饭,这都不是大家所关心的问题,大家所关心的就是:看菜单,点面,吃到面,这样一个结果而已。此过程如图15.1所示。再此过程中,英语就扮演了一个中间交互层标注协议的角色,双方都遵守它,就可以实现国际化的互联互通的服务。15.1日本面馆用英文解决国际化服务问题好了,现在引用一些资料来简介WebService:“从表面上看,WebService就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web调用来实现某个功能的应用程序。例如,可以创建一个WebService,它的作用是查询某公司某员工的基本信息。它接受该员工的编号作为查询字符串,返回该员工的具体信息。你可以在浏览器的地址栏中直接输入HTTPGET请求来调用罗列该员工基本信息的ASP页面,这就可以算作是体验WebService了。从深层次上看,WebService是一种新的Web应用程序分支,它们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过Web来调用。WebService便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得WebService能与其他兼容的组件进行互操作。它可以使用标准的互联网协议,像超文本传输协议HTTP和XML,将功能体现在互联网和企业内部网上。MyEclipse6Java开发中文教程3刘长炯著WebService平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用你喜欢的任何语言,在你喜欢的任何平台上写WebService。”我想,看到这定义的人都会感到一头雾水,不知所谓。那么好了,看图15.2中的Web服务结构图吧。在这个图中,列出了WebService的几个关键部分。包括:z简单对象访问协议(SOAP,SimpleObjectAccessProtocol)zWeb服务描述语言(WSDL,WebServiceDefinitionLanguage)z统一描述、发现和集成(UDDI,UniversalDescription,Discovery,andIntegration)图15.2WebService结构图现在,让我们把它和图15.1的就餐过程进行类比。假设我们在路上饥肠辘辘,忽然,眼前一亮,前面出现一指示牌:前方500米处有就餐服务,详情请去店内咨询。这是什么?这就是UDDI,它告诉您在什么位置有什么样的Web服务,但是很显然服务的细节是不会贴在指示牌上的,需要你亲自去店内查看。到了店内,您最关心的内容就是菜单,也就是WSDL,它会描述每种菜的特点和定价,您根据自己的情况,来选择打算吃那种菜(当然,这里是国际标准的菜单描述格式)。然后,您用英文,一种大家都听得懂的语言,来向服务员表明您的希望,当然,内容必须是和菜单有关的内容,您不能向服务员说:请问一只轮胎多少钱?这就是SOAP所做的事,您必须用XML协议来表达您在WSDL上看到的服务项目。服务员听到后,翻译成自己能理解的内容后根据实际情况作出反应:很好,某某菜一会就做好;或者不幸的是:对不起,这道菜原料用完了,请换一道。同样,它也用SOAP向您返回结果。这就是Web服务的过程,不过在计算机的世界里,客户端成了某电脑上的程序(可以用各种语言开发),服务器端则是某台运行HTTP并支持WebService服务的服务器程序。因此,问题也潜在存在,那些无法写上菜单的服务项,是无法通过这种途径来传播的,换句话说Web服务只能在一定范围内实现互联互通,所以它无法取代现有的其它沟通途径,例如QQ和MSN。最后,UDDI的出发点很好,不过在企业内部,因为WSDL唾手可得,所以没有人愿意再去公司大院里竖起一块牌子列出本公司都有哪些Web服务,所以UDDI在企业内部使用时,是几乎用不到的。那么,Web服务能做什么?可以查股票,天气预报等这些类似于一问一答的服务。现在Java的最新版,包括JDK6和JavaEE5,都对Web服务提供了很完整的支持。现在的开发者已经很少再需要去详细的了解SOAP和WSDL的详细格式,一般来说大家通过可视化的设计器或者开发工具,就可以很快的实现一个Web服务,包括生成服务器端代码和客户端代码等等。例如JavaEE5使用标注