使用PowerDesigner 9.5创建Web服务

  Sybase公司PowerDesigner总设计师Xiao Wang撰稿

  Web服务允许您以标准格式提供现有的或新增的功能,并且允许用户和应用程序从任何位置访问它们。

  PowerDesigner 9.5同时针对Microsoft .NET和Java引入了完善的Web服务设计和生成机制。使用PowerDesigner 9.5,您可以专注于Web服务的设计,而将所有必需的生成、实现构造的任务交给PowerDesigner完成。

  Web服务概述
  Web服务是一种接口,它描述了在网络上可通过SOAP消息进行访问的操作集合。

  Web 服务的接口和部署位置(可选)由WSDL说明。WSDL是一种声明数据类型、消息、端口类型和端口(可选)的XML文档。通过WSDL,用户可以知道应该发送哪种格式的SOAP消息来调用Web服务以及返回消息的格式为何。

  为了能使用户查找到所需的Web服务,服务提供者可能会在UDDI注册服务中发布WSDL文档。这样,用户就可以使用UDDI注册服务来搜索Web服务。

  若要调用Web服务,用户可以向部署Web服务时所在的访问点URL发送SOAP消息,或者使用可简化此调用过程的代理类。SOAP消息也是XML文档。

  PowerDesigner的Web服务功能
  PowerDesigner 9.5允许您新建Web服务组件、通过对WSDL进行反向工程来创建Web服务组件、浏览UDDI 、搜索WSDL、从Web服务组件的定义生成WSDL、生成.NET(C#和VB .NET)的服务器端代码、生成.NET的客户端代理、生成Java(JAX-RPC和JAXM)的服务器端代码以及生成Java的客户端代理。

  为了设计Web服务组件,PowerDesigner使用了UML类图、组件图和部署图。Web服务由组件图的组件表示,而已部署的Web服务则由部署图的组件实例来表示。

  创建Web服务组件
  创建Web服务组件有五个步骤。首先是要创建面向对象模型(OOM)。您可以选用以下语言中的任一种:C#、Visual Basic .NET或Java。在此模型上会自动附加用于WSDL的扩展模型定义(XEM)。XEM定义了WSDL的生成模板和扩展属性。

  第二步是创建类。最好是先创建一个程序组(Package),然后再在此程序组下创建类。

  第三步是使用Web服务向导将创建的类转换成Web服务组件。为此您可以右键单击该类,然后选择“创建Web服务组件”命令,或在选中该类后选择“工具>创建Web服务组件”命令。图1显示了一个Web服务向导的示例。Web服务类型可以是接口或实现。如果选择“接口”,则表明您只希望定义此Web组件并生成相应的WSDL。对于.NET,此组件类型为“标准”,其Web服务将通过.asmx文件来实现。对于Java,此组件类型可能是“标准”、“服务程序”或“无状态会话 Bean”。这几种Java组件类型的实现方法分别是:“标准”类型使用JAX-RPC、“服务程序”类型使用JAXM,而“无状态会话 Bean”类型将使用J2EE(JSR109)Web服务规范。当向导结束时会创建一个组件和类。图2显示了组件图中的组件符号示例。


图 1 Web 服务向导


图 2 组件符号

  第四步是添加Web方法。您需要新建一个操作(Operation)、打开该操作的属性页、单击“Web 方法”复选框、定义参数和返回类型以及编写该操作的实现代码。图3显示了Web方法GetStockQuote的实现示例。


图3 Web方法GetStockQuote的实现示例

  最后一步是对WSDL生成进行自定义。可以自定义参数和返回值的WSDL数据类型、操作的扩展属性以及组件的属性和扩展属性。若要检验生成的WSDL,您可以打开组件属性页的WSDL选项卡。生成WSDL的任务可以交给PowerDesigner完成,也可以由您自行定义(用户定义)。如果Web服务组件来源于对WSDL的反向工程,原始的WSDL将得到保留。图4显示了一个生成的WSDL的示例。


图4 生成的WSDL的示例

  您可以在类属性页的"预览"选项卡中预览生成的实现代码。 您可以使用部署图、节点和组件实例来仿建已经部署的Web服务组件。此外,还可以在"节点"中定义服务器的URL以及在"组件实例"中定义服务的URL。

  对WSDL进行反向工程
  WSDL可以仅定义Web服务接口,也可以同时定义接口和访问点的URL。Web服务接口可能被多个服务提供者用来提供相同的服务,当然,这些服务会具有不同的实现和访问点。如果拥有WSDL文档的文件路径或URL,您就可以通过对它进行反向工程来创建Web服务组件,之后可以定义自己的实现方法或将创建的Web服务组件保存在库中供以后再次使用。您在查找感兴趣的WSDL时,可以使用UDDI浏览器在UDDI注册服务中进行搜索。

  为了对WSDL进行反向工程,需要用C#、VB .NET或Java中的任意一种语言创建OOM。然后选择“语言>导入 WSDL”命令并输入WSDL文件的路径或URL。进行反向工程之后,会在组件图中创建一个组件,同时在类图中创建一个类。所创建的类将仅包含该Web服务的操作信号,若想实现该Web服务,还需要定义这些操作的实现代码。

  在UDDI注册服务中搜索WSDL
  如果希望搜索在UDDI注册服务中注册的WSDL,请打开“导入WSDL”窗口,然后单击“浏览UDDI”按钮。通过“浏览 UDDI”窗口(见图 5),您可以选择UDDI运营商、搜索条件和搜索类型,并可以按实体名称、服务名称或WSDL名称进行搜索。此外,您还可以预览找到的WSDL。


图5 “浏览UDDI”窗口

  生成.NET类型的Web服务
  对于.NET服务器端代码,PowerDesigner会生成一个.asmx文件。这种Web服务的实现类可以在上述的.asmx文件中生成,也可以在外部生成。此实现类所使用的语言可以是C#或者VB .NET。在类属性页的“预览”选项卡中,可以预览.asmx文件和相应的实现类代码。图6 显示了C#语言的.asmx文件示例。


图6 C#语言的.asmx文件示例

  PowerDesigner还可以生成客户端代理类来简化Web服务的调用。为生成客户端代理类,PowerDesigner使用了Visual Studio .NET附带的wsdl.exe程序。

  若要生成WSDL、服务器端代码和/或客户端代理,请选择“语言>生成C#代码”或“语言>生成VB .NET代码”命令。如果要生成客户端代理,可以在“任务”选项卡中选择“生成Web服务客户端代理”选项。图7显示了可用的生成任务。如果这个类不是在.asmx文件内部生成的,您将可以对这些C#代码或VB .NET代码进行编译。不过,在编译C#或VB .NET文件时,您必须定义CSC或VBC变量来指示csc.exe或vbc.exe命令的位置。

  在部署Web服务时,只需要将IIS目录下的.asmx文件和相应的类文件进行复制:C:\Inetpub\wwwroot\<程序组名>。其中,<程序组名> 是程序组的名称。要测试此Web服务,可以在浏览器中输入以下URL: http://<主机名>/<程序组名>/<服务名>.asmx


图7 Web服务的生成任务

  生成Java类型的Web服务
  如果Web服务的实现类型为“标准”,PowerDesigner将使用JAX-RP 来实现。如果实现类型为“服务程序”,PowerDesigner将使用JAXM来实现。如果实现类型为“无状态会话Bean,则PowerDesigner将使用J2EE(JSR109)Web服务规范来实现。JSR109尚未正式颁布。”

  JAX-RPC定义了RPC类型的Web服务调用。虽然它易于开发和使用,但为了避免复杂的对象/XML映射,它只能局限于简单的消息格式。而基于JAXM的Web服务组件显然更具优越性,它允许您灵活地处理复杂的消息结构。

  若要使用JAX-RPC或JAXM,您需要安装Java Web Services Developer Pack(JWSDP)。此程序包可从Sun公司的网站下载。在部署JAX-RPC或JAXM类型的Web服务组件时,需要有支持JAX-RPC或JAXM的服务器。支持JAX-RPC或JAXM的Apache Tomcat附带提供了JWSDP。

  至于基于JAX-RPC的Web服务组件,您只需实现其Web方法的代码。若要生成WSDL、服务器端代码和/或客户端代理,可选择“语言>生成Java代码”,然后选择“使用XRPCC工具生成WSDL(服务器端)”和/或“使用XRPCC工具生成Web服务的代理代码”命令(见图8)。XRPCC命令是JWSDP的一个工具。它可以生成JAX-RPC类型的服务器端代码或客户端代理。在部署生成的Web服务时,需要创建一个包含所有生成文件的.WAR文件,并将此.WAR文件部署在支持JAX-RPC的服务器上,比如说Apache Tomcat。


图8 JAX-RPC生成任务

  对基于JAXM的Web服务组件而言,您需要实现其onMessage操作。onMessage操作将按照在WSDL中的指示,接收并处理输入的SOAP消息并构建返回消息,以及将此消息返回。要生成WSDL和JAXM类型的Web服务,请选择“语言>生成Java代码”命令,然后选择“构建Web组件,创建Web应用程序WAR”命令(见图9)。该命令会对JAXM服务程序代码进行编译并创建WAR文件。要部署此JAXM服务程序,您可以将上述WAR文件部署在支持JAXM的服务器上,比如说Apache Tomcat。


图9 JAXM生成任务

  至于基于无状态会话Bean的Web服务组件,由于JSR109规范尚未正式颁布,因此目前还不能使用。

  下一步要增强的功能
  J2EE(JSR109)Web服务规范不久将面世,供人们使用。通过它,您可以将无状态会话Bean用作Web服务实现的利器。它可以让现有功能以Web服务的新面目出现,同时也可以新建Web服务。PowerDesigner 9.5附带提供了基于早期JSR109规范的版本,该版本尚待进一步的认证。等该规范正式颁布后,我们将提供维护版本以实现对它的完全支持。

  PowerDesigner的新版本还将支持Web服务的综合标准。

  结论
  PowerDesigner 9.5简化了Web服务的设计和生成过程。只要懂得如何创建类和方法,就能知道如何创建Web服务!您可以使用PowerDesigner设计、创建Web服务,以及对它进行反向工程和为其创建文档。如果希望重复使用这些Web组件,您可以创建一个Web服务组件库,并使用版本库(Repository)来管理不同版本的Web组件。