应用服务 web服务_消费Web服务

在你开始前

了解对本教程有什么期望,以及如何充分利用本教程。

关于本教程

Web服务为应用程序提供了一种使用通用协议轻松进行通信的方法,该协议允许跨平台和跨时区进行协作。 但是,对于以前从未使用过Web服务的开发人员而言,仅了解所有首字母缩写可能是一个挑战。 可以使用基于文本的XML交换消息,因此任何系统都可以读取它们; 诸如简单对象访问协议(SOAP)之类的协议可以定义其内容,以便系统识别它们在查看什么。 您可以使用Web服务定义语言(WSDL)文件描述整个邮件系统,并在通用描述,发现和集成(UDDI)目录中发布有关服务的信息,以供公司查找。

幸运的是,使用Web服务不需要了解所有不同的技术-如果您拥有正确的工具。 IBM®Rational®Application Developer版本6.0(或IBM Rational Web Developer版本6.0)使您可以创建和使用Web服务,而无需了解有关XML,SOAP或所涉及的任何其他首字母缩写的任何知识。

在本教程中,您将:

  • 了解不同的技术如何相互作用以使Web服务正常工作
  • 将简单的库存控制应用程序包装为Web服务
  • 测试Web服务
  • 浏览Web服务使用者的代码
  • 为外部Web服务构建Web服务客户端
  • 测试外部Web服务
  • 构建一个WSDL文件
  • 将WSDL文件转换为Web服务

系统要求

要运行本教程中的示例,您需要以下软件:

  • Rational Application Developer版本6.0(下载最新的试用版 )或Rational Web Developer版本6.0(下载最新的试用版 )。
  • Apache Tomcat 5.0版。 您可以使用Apache Tomcat 5.0或更高版本。
  • 样本文件。 首先,本教程包括一个简单的Java™类,您可以下载该类。

如果您需要快速入门 ,请参阅参考资料中的相关教程。 强烈建议您熟悉Java技术。

基本Web服务概念

肥皂

本教程的总体思想是允许您从应用程序内部使用Web服务。 您可以通过Web服务界面或使用现有Web服务界面使现有代码可用,或者同时使用这两者。

Web服务通过在应用程序之间来回发送消息来工作。 这些消息可能很简单,例如向我发送中国当前的茶叶价格,也可能很复杂,例如向我发送我需要修复的机械的详细信息。 找出将其放在计划表中的位置,创建工作订单,并确保零件得到订购。 接收消息的系统可能会创建一个响应,并将其发送回原始请求者。 这些消息通常以称为SOAP的XML形式发送。 SOAP消息由具有特殊形式的文本(带有标头和正文)组成,允许对话双方了解对它们的期望。

SOAP消息可以做的不仅仅是提供信息。 请注意,上段中的两个示例都涉及请求接收者实际执行某项操作,例如查询价格或安排维修。 SOAP消息可以用作远程过程调用(RPC)的一种形式,从而使世界另一侧的系统可以执行世界另一侧的Java方法(参见图1)。

图1. SOAP消息

SOAP消息

这些公开的方法组成了Web服务接口。 本教程说明了如何在自己的应用程序中采用这些方法并以这种方式公开它们。 在某些系统中,可能的方法及其响应在一组WSDL文档中进行了详细说明,如下一小组所讨论。

WSDL

WSDL为系统提供了一种解释其功能以及如何使系统执行此功能的方法。 WSDL文件是XML,用于解释可在何处访问服务,可用的方法以及所需的参数及其类型(请参见图2)。 它还详细说明了任何预期响应的形式和类型。

图2. WSDL消息

WSDL消息

在Rational Application Developer中创建Web服务时,该工具会创建一组描述该服务的WSDL文件。 WSDL如此彻底地描述了服务,实际上,通过使用Rational Application Developer,您还可以使用WSDL文件中的Web服务。 本教程向您展示如何基于WSDL文件创建Web服务客户端。 该客户端包含访问Web服务所需的所有方法,而无需专门编写单个SOAP消息。

路由器和代理

网络管理员知道路由器和代理是控制诸如Internet之类的网络上的消息流的硬件和软件。 对于SOAP消息,Rational Application Developer以类似的方式充当代理。

在本教程中,您将学习如何构建通过Web服务公开的简单应用程序。 您还构建了一个测试客户端,可以通过使用此Web服务来访问该应用程序。 尽管在Web服务和客户端之间传递的数据是SOAP消息形式的,但是原始应用程序和客户端都没有直接使用SOAP消息。 与SOAP消息之间的转换是通过代理和路由器在后台进行的,如图3所示。

图3. Web服务交互

Web服务交互

当应用程序调用客户端方法时,该方法将通过代理进行中继。 然后,代理将方法转换为SOAP消息,该消息将被完整接收。 如果系统直接建立在SOAP消息上,则它将立即处理该消息。 但是,在Rational Application Developer公开了传统应用程序的情况下,该请求将被发送到RPC路由器,后者随后进行实际的方法调用并将返回的信息转换回SOAP消息。 响应消息由代理接收(在这种情况下),并转发给客户端应用程序。

如下面板所示,Rational Application Developer自动创建这些代理和路由器。

UDDI

难题的最后一部分涉及UDDI。 UDDI是一个创建通用注册表的规范,您可以在其中放置指向WSDL文件的指针,以供其他公司查找或发现。

UDDI注册中心包含有关公司及其提供的服务的信息。 本质上,UDDI是全球分布的业务注册中心。 向一个运营商注册可确保将您公司的信息复制到其他UDDI节点,使该信息可供在系统内任何地方搜索的公司使用。

从概念上讲,UDDI类似于庞大的电话簿。 白页使您可以按名称查找公司。 在那里,您可以看到他们提供的服务。 您还可以使用黄页查找公司,其中按分类列出了公司。 这意味着您可以查找携带体育用品或提供导航设备的公司。 您还可以使用绿色页面,该页面允许您查找提供特定服务的公司。 UDDI为公司提供了一种描述其服务的方式,但不需要使用WSDL。 相反,它提供了一种指向WSDL文件的方法。

如前所述,Rational Application Developer使您能够使用UDDI中发现的信息直接导入WSDL文件,并通过Web Services Explorer发布有关您自己的WSDL文件的类似信息。

创建一个Web服务项目

建立专案

要在Rational Application Developer中构建Web服务,您需要在一个Web项目中工作。 要创建动态Web项目:

  1. 单击文件>新建>动态Web项目
  2. 单击下一步
  3. 使用如下所示的设置。

    图4.新动态Web项目的设置

    新的动态Web项目的设置
  4. 点击完成

注意:在本教程中,您将使用Apache Tomcat作为部署容器。 从URL http://jakarta.apache.org/tomcat安装Apache Jakarta Tomcat。 安装服务器后,通过执行以下步骤在工作台中创建Tomcat服务器:

  1. 文件菜单中,选择新建>其他>服务器>服务器>下一步
  2. 选择Tomcat v5.0作为服务器类型(或安装的Tomcat的正确版本),然后单击Next
  3. 在“ Tomcat服务器”页面上,输入服务器名称并指定Tomcat的安装位置。
  4. 单击“ 已安装的JRE” ,单击“ 添加” ,然后为您计划用于Tomcat的JDK输入适当的信息。 例如,对于Tomcat 5.0版,JRE名称为jdk1.5 ,JRE主目录为JDK 1.5.0的主目录。 输入信息后,单击确定两次。
  5. 确保现在已在Tomcat服务器窗口的JRE字段中选择了新添加的JDK。 请注意,如果将服务器指向JRE而不是JDK,则JavaServer Page(JSP)文件将无法正确编译,并且将无法在Tomcat服务器上运行。
  6. 点击完成
  7. 要查看在工作区中创建的服务器,请从“窗口”菜单中选择“ 显示视图”>“其他”>“服务器”>“服务器”>“确定”

创建Java bean

本教程采用了一个简单的库存控制应用程序,并通过Web服务接口将其公开。 该应用程序本身包含用于检索信息(例如名称,价格和现有数量)的方法,以及用于购买商品(减少现有数量)的方法。 清单1显示了该应用程序的框架。

清单1.库存控制应用程序

public class InventoryItem {
               
public String getProductName (String productId) {
...
}
               
public String getProductId (String productName) {
...
}
               
public double getPrice (String productId){
...
}       
               
public boolean getInstock (String productId) {
... 
}     
               
public int getInstockAmt (String productId) {
... 
}  
               
public int buyItem (String productId) {
...   
}  
}

由于将应用程序转换为Web服务的过程不受实现目标的方式的影响,因此省略了这些实现。 该应用程序可能正在访问数据库,XML文件或其他某种形式的存储。 这可以是您编写的任何应用程序。

但是,如果要严格遵循,本教程将提供一个简单的版本InventoryItem.java,您可以将其导入自己的项目中。 (有关下载此文件的链接,请参阅先决条件。)该应用程序不需要数据库或任何特定的数据文件。

汇入课程

要构建Web服务,首先需要将类导入项目:

  1. 选择窗口>打开透视图>其他>资源
  2. 单击确定
  3. 从文件菜单中,选择导入 。 出现一个窗口,其中列出了可以从中导入资源的位置。
  4. 选择文件系统
  5. 从本教程示例代码中浏览并导入InventoryItem.java类(请参见图5)。

    图5.导入Java类

    导入Java类
  6. 点击完成

您应该能够从导航器导航到WEB-INF / classes文件夹,并查看该类的编译版本。 这表明您已成功导入。 如果发现任何错误,请在继续操作之前进行更正。

创建Web服务

现在,您可以实际创建Web服务了:

  1. 从“ 文件”菜单中,选择“ 新建”>“其他”
  2. 选择Web Service ,如图6所示。

    图6.创建Web服务

    创建Web服务
  3. 单击下一步

基本特性

Rational Application Developer使您能够从几种不同的资源创建Web服务:

  • Java bean。 您可以将任何Java Bean或简单Java类公开为Web服务。
  • EJB。 您可以将无状态会话企业Java Bean(EJB)的方法公开为Web服务。
  • DADX。 您可以将此文件公开为Web服务。 该XML文件包含需要运行的操作和SQL语句。
  • 网址。 您可以通过URL映射将servlet公开为Web服务。

图7显示了需要为Web服务输入的基本设置。

图7.指定Web服务的配置

指定Web服务的配置

对于此示例,创建一个Java bean Web服务并生成一个Java代理。 这是一个简单的Web服务,它将使您能够在Rational Application Developer中演示Web服务生成功能。

注意:您可以从两种不同的方法中进行Web服务实现:自上而下的设计和自下而上的设计。

选择“测试Web服务”选项,以便为您生成一个测试客户端,以便您可以测试Web服务。 该客户机演示了使用Web服务所需的代码,以及可以使用Rational Application Developer自动生成多少代码。 “监视Web服务”选项是一项不错的功能,但它具有更高级的功能,它使您可以监视Web服务正在发送和接收的SOAP消息。

单击下一步

部署配置

图8显示了如何设置部署配置。

图8.指定Web服务的部署配置

指定Web服务的部署配置

对于此示例,使用Apache Axis Web服务运行时(以Apache Tomcat作为服务器)部署服务。 我之所以使用Apache Axis,是因为它是当今最流行的Web服务运行时之一,并且是开源的。 Apache Axis已捆绑到您的原始Rational Application Developer下载中。

如本教程开头所述,您将使用Apache Tomcat作为部署容器。 作为练习,请尝试将Web服务部署到您选择的容器,例如IBMWebSphere®或WebLogic服务器。

单击下一步

WSDL和方法

图9显示了Web服务的不同选项,包括WSDL文件的名称以及您希望通过Web服务公开的Java文件中的哪些方法。 您还可以定义此Web服务是文档样式的Web服务还是RPC Web服务。 请参阅相关信息的链接,关于这两个样式的更多信息。

尽管文档样式的Web服务在某些方面更强大,但实现起来也更具挑战性。 因此,为了帮助您更轻松地使用Web服务,请选择RPC样式。 这种样式更易于使用,并且仍然涵盖了Web服务的所有基本概念。

图9.指定Web服务的类型和公开的方法

指定要公开的Web服务的类型和方法

对于此示例,选择所有方法。 此服务是RPC /编码的Web服务。 在WSDL File字段中,输入名称InventoryItem.wsdl并单击Next

您将看到正在构建的Web服务,然后将看到如何测试Web服务的选择。 单击下一步

在下一个窗口中,定义Web服务代理。 现在,保留默认值,然后单击“ 下一步”

指定测试环境

在“ Web Service客户端测试”窗口中,定义有关如何测试Web服务和代理的基本选项(请参见图10)。 现在,保留默认值。

图10.指定Web服务的测试配置

指定Web服务的测试配置

在此示例中,为Web服务生成基于JSP的测试客户端。 基于JSP的测试套件简单易用。 它还演示了以生成Web服务使用者为起点的价值。 请注意,下面的代码很复杂,用手编写将非常耗时。 选择所有方法,以便生成的JSP文件启用对所有方法的测试,然后单击“ 下一步”

发布Web服务

在“ Web服务发布”窗口中,可以选择是否要将Web服务发布到UDDI目录。 您可以将Web服务发布到可能正在运行的外部存储库或内部UDDI注册表中。 但是,由于Apache Tomcat是本示例中使用的服务器,并且此服务器未附带UDDI注册表,因此请清除窗口中的两个选项并单击Finish ,以选择不发布此Web服务(请参见图11)。

图11.发布Web服务的选项

发布Web服务的选项

IBM WebSphere Application Server带有内部UDDI注册中心。 如果选择在本教程中使用WebSphere Application Server,则可以探索此选项。 “ 相关主题”部分提供了一个链接,您可以在其中了解有关WebSphere Application Server随附的UDDI注册表的更多信息。

测试您的Web服务

Tomcat启动时,应加载图12所示的JSP页面。在此页面上,您可以测试Web服务以及其中的各种方法。

图12.用于测试Web服务的JSP页面

用于测试Web服务的JSP页面

对于每种方法,请尝试输入一些值,然后单击Invoke 。 例如,在productId文本文件中,如果输入SA15并单击Invoke ,则应返回16英寸的Silver Show Saddle 。 现在,在productName文本字段中输入此返回值,然后单击Invoke 。 您应该返回SA15。

验证检索到的结果是否与每种方法的InventoryItem.java文件实现一致。 在Java源文件中每种方法的实现中都定义了所有可能的输入和输出。

现在您已经创建并测试了Web服务,让我们看一下所创建的服务的各个部分。

剖析Web服务

看看WSDL

在导航器中,依次展开Web Content文件夹和WSDL文件夹。 双击InventoryItem.wsdl文件。 该WSDL文件是作为Web服务创建过程的一部分自动生成的。

在Rational Application Developer中,您可以同时看到WSDL源和WSDL的图形表示。 请注意,“源代码”视图阅读起来相当复杂。 WSDL只是另一个XML文件,但是尝试手动解密XML可能很繁琐。 为了简化操作,请单击“图形”选项卡切换到“图形”视图。

该WSDL表示一项服务,并公开了该服务的几种方法。 在图视图中展开不同的部分,以查看Web服务的连接方式(请参见图13)。

图13. WSDL文件的图形视图

WSDL文件的图形视图

如您所见,WSDL文件相当复杂,并且自动生成该文件可能是一件好事。 但是,在本教程后面的部分中,您将学习如何使用Rational Application Developer创建WSDL文件。

浏览该项目中的其他文件夹,并特别注意此Web服务的部署描述符。 该服务非常基础,只需单击几下即可将简单的InventoryItem.java类(仅是Plain Old Java Object或POJO)公开为Web服务。 下一节“使用外部Web服务”提供了使用外部Web服务的示例,该过程稍微复杂一些。

现在,让我们看一下Web服务的客户端或使用者。

Web服务使用者

在导航器中,展开MyFirstWebServicesProjectClient 。 展开JavaSource文件夹。 为了使用简单的POJO,系统创建了五个Java类,如图14所示。

图14. Web服务使用者的Java文件

Web服务使用者的Java文件

您将看到有助于定位Web服务的代码,该代码充当Web服务的代理,并提供定位器和代理之间的绑定。 您还将看到一个可用于Web服务的简单bean。

Web服务测试客户端

除了使用者代码之外,您还创建了一组JSP文件,使您可以测试Web服务。 您在图12中看到了基本的JSP文件。这些文件使您可以调用WSDL中公开的每个方法。 您可以发送基本输入并查看Web服务调用的结果。

考虑浏览Result.jsp文件中的代码。 该文件实际上是对Web服务使用者代码的调用,而后者又调用了Web服务。

这在现实世界中如何运作?

那么,这一切如何运作? 在此示例中,您已经了解了如何轻松使用Web服务。 您最终得到了使用者代码和某种测试客户端。 对于您的实际应用程序,您需要做的就是将Result.jsp文件中的代码剪切并粘贴到Java类中。 将该类称为<< WebServiceName >> ConsumerDelegate.java。 在大多数情况下,该类可以是POJO。 让您的代码调用此委托类以与Web服务接口。

你完成了。 现在,您可以使用在应用程序中使用的Web服务。

消耗外部Web服务

创建一个Web服务客户端

作为一个更具体的实际示例,让我们使用xmethods.net站点上的Web服务。 您可以使用任何其他Web服务:只需遵循此处确定的步骤。

对于此示例,选择站点上列出的“电子邮件地址验证程序” Web服务。 只需提供WSDL的URL-http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx?wsdl。

  1. 打开Rational Application Developer。
  2. 选择文件>新建>其他
  3. 单击Web Service Client ,如图15所示。

    图15.启动Web Service客户端向导

    启动Web服务客户端向导
  4. 单击下一步

导入WSDL

将URL剪切并粘贴到xmethods.net电子邮件地址验证程序Web服务的WSDL中,如图16所示,将其粘贴到文本框中。

图16.导入Web服务的WSDL

导入用于Web服务的WSDL

请遵循“创建用于选择服务器的Web服务项目”中概述的步骤,直到出现“ Web Service客户端测试”窗口。

Web服务客户端测试

在上一个示例中,您选择生成JSP文件来测试您的Web服务。 在此示例中,从“测试工具”下拉列表中选择“ Web服务资源管理器” ,如图17所示。这样做可以使您看到不同类型的Web服务测试客户端。 底层代理和路由器代码将与您使用的代理和路由器代码相似,但客户端代码将有所不同。

图17.选择Web Services Explorer作为测试工具

选择Web服务资源管理器作为测试工具

对于此示例,您仅选择最后三种方法,这是生成测试客户端时可用的唯一方法。 排除getEndPoint和setEndPoint方法的主要原因是,这些方法是与Web服务相关的更通用的方法,而不是特定于电子邮件地址验证程序Web服务的业务逻辑方法。

点击完成

测试新的Web服务客户端

图18显示了生成的新的Web服务客户端。 在此示例中,在“ 输入”字段中输入了电子邮件地址,然后单击“ 转到” 。 与邮件服务器有关的信息显示在窗口底部的状态部分中。

测试生成的Web服务,并浏览该客户端的源代码树。

图18. Web服务测试客户端

Web服务测试客户端

创建一个WSDL文件和一个Web服务

创建一个WSDL文件

在大多数情况下,从Java代码构建Web服务会比较容易-不管是EJB还是简单的Java类。 按照本节概述的顺序构建Web服务,因为:

  • 实现此Web服务的代码不存在
  • 您需要将接口发布到Web服务,以便其他人可以开始编写使用者
  • 您需要更多的XML投诉

在本部分中,您将学习如何使用Rational Application Developer构建WSDL文件。 当您拥有WSDL时,可以使用本教程前面演示的方法将其转换为Web服务。

要在Rational Application Developer中创建WSDL文件,请单击File> New> Other 。 在“选择向导”窗口中,选择WSDL ,如图19所示。您将构建一个名为CurrencyConvertor.wsdl的简单WSDL文件,该文件允许您将一种货币转换为另一种货币。

图19.选择向导来创建WSDL文件

选择向导以创建WSDL文件

打开WSDL文件

从导航器中,展开WebContent文件夹,然后打开WSDL文件,如图20所示。

图20.打开CurrencyConvertor.wsdl

打开CurrencyConvertor.wsdl

生成WSDL文件

这可能是最复杂的步骤。 您需要定义方法以及此WSDL文件的输入和输出。 对于此示例,定义一个简单的Web服务操作,称为convertCurrency。 此操作接受三个参数:fromCountry,toCountry和convertAmount。 前两个参数是字符串; 最后一个参数是浮点数。

建立一个港口

首先,使用WSDL文件的Port Types Panel建立一个端口。 端口定义了服务的端点,即服务可用的端点。

  1. 在面板中右键单击以创建一个新端口。
  2. 将端口命名为currencyConvertorPort。
  3. 右键单击currencyConvertorPort并选择“ 添加操作”以添加一个名为currencyConvert的操作。

图21显示了这些操作后WSDL文件的外观。 请注意,示例消息是自动创建的。

图21.在WSDL文件中构建一个端口

在WSDL文件中构建端口

自定义消息

  1. 右键单击currencyConvertRequest消息,然后选择添加零件 。 从国家/地区命名零件。
  2. 对toCountry和convertAmount重复此步骤。 请注意,默认情况下,所有部分都为字符串类型。
  3. 右键单击convertAmount类型,然后选择Set Type
  4. 在“指定类型”窗口(参见图22)中,选择“ 选择现有类型” ,然后选择xsd:float

    图22.转换类型

    转换类型
  5. 点击完成
  6. 将一部分添加到currencyConvertResponse消息中。 将此类型称为convertAmount并将其转换为浮点型。 图23显示了您刚刚创建的最终消息部分。

    图23. WSDL文件的Messages部分

    WSDL文件的“消息”部分

现在,您必须构建其余的WSDL文件。

设置绑定

绑定到刚创建的端口类型:

  1. 右键单击WSDL文件的“绑定”面板中的任意位置,然后选择“ 设置端口类型”
  2. 在“指定端口类型”窗口中(参见图24),选择“ 选择现有端口类型” ,选择您创建的currencyConvertor端口,然后单击“ 完成”

    图24.绑定端口

    绑定端口类型
  3. 你几乎完成。 在导航器中,右键单击WSDL文件中的任意位置,然后选择Validate 。 WSDL文件应正确验证。 如果验证失败,则会显示一条错误消息,指出失败的原因。

生成Web服务

要从创建的WSDL文件生成Web服务,请右键单击WSDL文件中的任何位置(请参见图13),然后选择Web Services>生成Java bean框架 。 生成Skeleton Java Bean Web服务类型的Web服务。 此步骤生成一个框架类,您可以在其中实现实际的“货币转换”选项。 您还可以创建一个客户端来使用新的Web服务。

摘要

摘要

本教程描述了构成Web服务的基本技术。 它还显示了如何使用Rational Application Developer轻松公开和使用Web服务。 简单的向导将指导您将任何Java类作为Web服务公开。 使用Web服务客户端向导,您可以快速使用刚刚公开的Web服务或Internet上的另一个Web服务。 您不仅将获得所有Web服务使用者代码,而且还将获得可用于测试Web服务的丰富测试客户端。 本教程最后向您展示了如何使用Rational Application Developer来构建可转换为Web服务的WSDL文件。 该操作为您提供了为Web服务实现所需的框架类,以及为实现Web服务而测试Web服务的测试客户端。


翻译自: https://www.ibm.com/developerworks/rational/tutorials/rconsumews/rconsumews.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值