使用PowerDesigner 9.5创建Web服务

使用PowerDesigner 9.5创建Web服务,第1张

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

PowerDesigner 同时针对Microsoft NET和Java引入了完善的Web服务设计和生成机制 使用PowerDesigner 您可以专注于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 允许您新建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服务组件 命令 图 显示了一个Web服务向导的示例 Web服务类型可以是接口或实现 如果选择 接口 则表明您只希望定义此Web组件并生成相应的WSDL 对于 NET 此组件类型为 标准 其Web服务将通过 a x文件来实现 对于Java 此组件类型可能是 标准 服务程序 或 无状态会话 Bean 这几种Java组件类型的实现方法分别是 标准 类型使用JAX RPC 服务程序 类型使用JAXM 而 无状态会话 Bean 类型将使用J EE(JSR )Web服务规范 当向导结束时会创建一个组件和类 图 显示了组件图中的组件符号示例

图 Web 服务向导

图 组件符号

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

图 Web方法GetStockQuote的实现示例

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

图 生成的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 窗口(见图 ) 您可以选择UDDI运营商 搜索条件和搜索类型 并可以按实体名称 服务名称或WSDL名称进行搜索 此外 您还可以预览找到的WSDL

图 浏览UDDI 窗口

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

图 C#语言的 a x文件示例

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

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

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

图 Web服务的生成任务

六 生成Java类型的Web服务 如果Web服务的实现类型为 标准 PowerDesigner将使用JAX RP 来实现 如果实现类型为 服务程序 PowerDesigner将使用JAXM来实现 如果实现类型为 无状态会话Bean 则PowerDesigner将使用J EE(JSR )Web服务规范来实现 JSR 尚未正式颁布

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服务的代理代码 命令(见图 ) XRPCC命令是JWSDP的一个工具 它可以生成JAX RPC类型的服务器端代码或客户端代理 在部署生成的Web服务时 需要创建一个包含所有生成文件的 WAR文件 并将此 WAR文件部署在支持JAX RPC的服务器上 比如说Apache Tomcat

图 JAX RPC生成任务

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

图 JAXM生成任务

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

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

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

lishixinzhi/Article/program/SQL/201311/16374

如果需要在原有的WebService接口上追加方法,可以使用WSDL来生成。
方法/步骤
1修改已有的WSDL文件追加想要的方法。
2需要下载和原来生成版本一致的Axis2的版本,否则会发布不成功。
3将下载的Zip包解压到任意Path下。比如 D:/axis2/
4通过输入命令cmd,进入控制台界面,进入解压后的Axis2的Path下。cd D:/Axis2/自己的 版本
5输入类似以下命令分别生成客户端和服务器端代码。
WSDL2JAVA -uri D:\test\Service\testServicewsdl -p lhlleetest -d adb -ss -sd -o D:\test\src
WSDL2JAVA -uri D:\test\Service\testServicewsdl -p lhlleetest -d adb -o D:\test\src
命令的具体 含义
o <path> : 指定生成代码的输出路径
-a : 生成异步模式的代码
-s : 生成同步模式的代码
-p <pkg> : 指定代码的package名称
-l <languange> : 使用的语言(Java/C) 默认是java
-t : 为代码生成测试用例
-ss : 生成服务端代码默认不生成
-sd : 生成服务描述文件 servicesxml
-d <databinding> : 指定databingding,例如,adb,xmlbean,jibx,jaxme and jaxbri
-g : 生成服务端和客户端的代码
-pn <port_name> : 当WSDL中有多个port时,指定其中一个port
-sn <serv_name> : 选择WSDL中的一个service
-u : 展开data-binding的类
-r <path> : 为代码生成指定一个repository
-ssi : 为服务端实现代码生成接口类
-s : 为生成的源码指定存储路径
-R : 为生成的resources指定存储路径
--noBuildXML : 输出中不生成buildxml文件
--noWSDL : 在resources目录中不生成WSDL文件
--noMessageReceiver : 不生成MessageReceiver类
3
1将生成的服务器端和客户端代码通过差分比较的方式分别合并到现有的Project内。
2在合并的时候需要注意比如Stub内的文件不可以直接Copy最好是使用覆盖的方式,因为在客户端内的文件定义了数组而在
3生成自动化代码的时候很可能定义的数组内的顺序是不一致的,因此这就需要生成的这个WSDL要和原来的保持一致


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10831882.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存