| 使用PowerDesigner 9.5创建Web服务 |
|
|
|
Sybase公司PowerDesigner总设计师Xiao Wang撰稿 Web服务允许您以标准格式提供现有的或新增的功能,并且允许用户和应用程序从任何位置访问它们。 PowerDesigner 9.5同时针对Microsoft .NET和Java引入了完善的Web服务设计和生成机制。使用PowerDesigner 9.5,您可以专注于Web服务的设计,而将所有必需的生成、实现构造的任务交给PowerDesigner完成。 Web服务概述 Web 服务的接口和部署位置(可选)由WSDL说明。WSDL是一种声明数据类型、消息、端口类型和端口(可选)的XML文档。通过WSDL,用户可以知道应该发送哪种格式的SOAP消息来调用Web服务以及返回消息的格式为何。 为了能使用户查找到所需的Web服务,服务提供者可能会在UDDI注册服务中发布WSDL文档。这样,用户就可以使用UDDI注册服务来搜索Web服务。 若要调用Web服务,用户可以向部署Web服务时所在的访问点URL发送SOAP消息,或者使用可简化此调用过程的代理类。SOAP消息也是XML文档。 PowerDesigner的Web服务功能 为了设计Web服务组件,PowerDesigner使用了UML类图、组件图和部署图。Web服务由组件图的组件表示,而已部署的Web服务则由部署图的组件实例来表示。 创建Web服务组件 第二步是创建类。最好是先创建一个程序组(Package),然后再在此程序组下创建类。 第三步是使用Web服务向导将创建的类转换成Web服务组件。为此您可以右键单击该类,然后选择“创建Web服务组件”命令,或在选中该类后选择“工具>创建Web服务组件”命令。图1显示了一个Web服务向导的示例。Web服务类型可以是接口或实现。如果选择“接口”,则表明您只希望定义此Web组件并生成相应的WSDL。对于.NET,此组件类型为“标准”,其Web服务将通过.asmx文件来实现。对于Java,此组件类型可能是“标准”、“服务程序”或“无状态会话 Bean”。这几种Java组件类型的实现方法分别是:“标准”类型使用JAX-RPC、“服务程序”类型使用JAXM,而“无状态会话 Bean”类型将使用J2EE(JSR109)Web服务规范。当向导结束时会创建一个组件和类。图2显示了组件图中的组件符号示例。
第四步是添加Web方法。您需要新建一个操作(Operation)、打开该操作的属性页、单击“Web 方法”复选框、定义参数和返回类型以及编写该操作的实现代码。图3显示了Web方法GetStockQuote的实现示例。
最后一步是对WSDL生成进行自定义。可以自定义参数和返回值的WSDL数据类型、操作的扩展属性以及组件的属性和扩展属性。若要检验生成的WSDL,您可以打开组件属性页的WSDL选项卡。生成WSDL的任务可以交给PowerDesigner完成,也可以由您自行定义(用户定义)。如果Web服务组件来源于对WSDL的反向工程,原始的WSDL将得到保留。图4显示了一个生成的WSDL的示例。
您可以在类属性页的"预览"选项卡中预览生成的实现代码。 您可以使用部署图、节点和组件实例来仿建已经部署的Web服务组件。此外,还可以在"节点"中定义服务器的URL以及在"组件实例"中定义服务的URL。 对WSDL进行反向工程 为了对WSDL进行反向工程,需要用C#、VB .NET或Java中的任意一种语言创建OOM。然后选择“语言>导入 WSDL”命令并输入WSDL文件的路径或URL。进行反向工程之后,会在组件图中创建一个组件,同时在类图中创建一个类。所创建的类将仅包含该Web服务的操作信号,若想实现该Web服务,还需要定义这些操作的实现代码。 在UDDI注册服务中搜索WSDL
生成.NET类型的Web服务
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
生成Java类型的Web服务 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。
对基于JAXM的Web服务组件而言,您需要实现其onMessage操作。onMessage操作将按照在WSDL中的指示,接收并处理输入的SOAP消息并构建返回消息,以及将此消息返回。要生成WSDL和JAXM类型的Web服务,请选择“语言>生成Java代码”命令,然后选择“构建Web组件,创建Web应用程序WAR”命令(见图9)。该命令会对JAXM服务程序代码进行编译并创建WAR文件。要部署此JAXM服务程序,您可以将上述WAR文件部署在支持JAXM的服务器上,比如说Apache Tomcat。
至于基于无状态会话Bean的Web服务组件,由于JSR109规范尚未正式颁布,因此目前还不能使用。 下一步要增强的功能 PowerDesigner的新版本还将支持Web服务的综合标准。 结论 |