IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere | SOA and Web services  >

使用 WebSphere Message Broker Version 6 动态更新 Web 服务接口

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码


级别: 中级

Ben Thompson (bthomps@uk.ibm.com), 咨询 IT 专家, IBM Hursley
Andy Piper (andy.piper@uk.ibm.com), 高级 IT 专家, IBM

2006 年 7 月 02 日

本文提供了有关用于执行 Ant 脚本和编写文件的 IBM® WebSphere® Message Broker Version 6 用户定义 Java® 节点的信息。本文中的方案动态地从 Internet URL 收集 WSDL 文档,提取文档的 XML 模式部分,然后将其作为消息集字典导入,从而将定义部署到活动代理。读者还将了解如何安装用户定义 Java 节点以及如何在 Web 服务体系结构中实现代理。

引言

在集成项目的迭代开发周期中,Web 服务提供者通常将通过在公司的内部网或 Internet 网站上重新发布描述接口的 WSDL 文档来更新其提供给使用者的接口。软件供应商和集成专家务必能够快速地对其部署代码进行调整,以对接口更改做出响应。在不需要大量更改功能代码的情况下(例如,添加了新消息格式而不是更改现有格式时),本文中提供的 WebSphere Message Broker 方案将通过使用以下技术来满足此要求:

  • 使用 ESQL 对 HTTPRequest 节点进行转换,以执行 HTTPGet
  • 使用 ESQL 管理 WSDL 文档的版本控制
  • XML 转换节点使用的样式表,用于从 WSDL 提取模式
  • 用于将模式文档写到文件系统的 Java 插件节点
  • 用于运行 Ant 构建文件的 Java 插件节点
  • 使用自动部署 Message Broker 命令行实用工具(mqsicreatemsgdefs、mqsicreatebar 和 mqsideploy)的 Apache Ant 构建文件

在主方案之外,我们编写的插件节点将帮助开发人员从 Message Broker 获得更多的价值。一个节点将文件写入到代理的本地文件系统(对于生产使用,还应该考虑实现 Message Broker File Extender 产品)。第二个节点执行 Ant 脚本。Ant 是一个基于 Java 和 XML 的 make 工具,由 Apache Foundation 开发。通过调用 Ant 脚本,消息流可触发一系列不同的进程。例如,安装了正确的 Ant 扩展任务后,可以触发 FTP 传输,可以写入日志文件或执行另一个操作系统进程。因此,Ant 节点扩展了代理部署的功能,还提供了实现简单自动化的机会。

图 1 中所示的消息流说明了在本文提供的端到端方案中涉及到的各个阶段。


图 1. DynamicWSUpdate 消息流
DynamicWSUpdate 消息流

在工具包中安装 FileUdn

  1. 将本文的下载部分提供的 Scenario.zip 解压缩到根目录(如 Windows™ 上的 C:)。所有示例和方案都包含在一个名为 Resources 的目录中。该 zip 文件包含以下内容:



    文件描述
    Resources\UdnDevWorkspace用于安装用户定义 Java 节点的 Message Broker 工作区(包括节点的源代码)
    Resources\ScenarioWorkspace 方案的 Message Broker 工作区(包括消息流项目)
    Resources\DynamicWSUpdate.xslXML 样式表,由 Message Broker 中的 XML 转换节点使用
    Resources\DynamicWSUpdate_AntBuild.xmlAnt 构建文件,由 Message Broker 中的 Ant 用户定义 Java 节点使用
    Resources\Input.xml方案所使用的输入文件
    Resources\FileUdnOutput\Output.xsd工作方案所生成的示例输出文件
    Resources\Logs\AntLog.logAnt 用户定义 Java 节点生成的示例日志文件
    Resources\Logs\CreateMsgDefLog.logMessage Broker 中的 XML Schema Importer 生成的示例日志文件


    注意:如果选择将文件解压缩到不同的位置,可能必须稍后重新配置 Ant 构建文件和消息流属性。

  2. 启动 Message Broker V6 工具包。出现提示时,选择工作区 C:\Resources\UdnDevWorkspace。此工作区提供了消息流节点和 Update Manager Site 项目的所有源文件。这个目录结构由 Eclipse Install/Update Manager 用于在 Workbench 中查找功能和插件。
  3. 当工具包启动时,请从 Help 菜单选择 Software Updates => Find and Install
  4. 选择 Search for new features to install,然后单击 Next
  5. 单击 New Local Site
  6. 选择 C:\Resources\UdnDevWorkspace\com.ibm.issw.fileudn.site 处的 FileUdn Update Site 项目。
  7. 展开 Update Site 项目,并选择 FileUdnFeature,然后单击 Next
  8. 选中 com.ibm.issw.fileudn.feature,然后单击 Next
  9. 接受许可协议中的条款,然后单击 Next
  10. 选择功能的目标安装位置。在 Available Sites 中选择 C:\IBM\MessageBrokersToolkit\6.0\Eclipse
  11. 单击 Finish
  12. 关闭 Message Broker 工具包。

在工具包中安装 AntUdn

  1. 启动 Message Broker 工具包。出现提示时,选择工作区 C:\Resources\UdnDevWorkspace
  2. 当工具包启动时,请从 Help 菜单选择 Software Updates => Find and Install
  3. 选择 Search for new features to install,然后单击 Next
  4. 单击 New Local Site
  5. 选择 C:\Resources\UdnDevWorkspace\com.ibm.issw.antudn.site 处的 AntUdn Update Site 项目。
  6. 展开 Update Site 项目,并选择 AntUdnFeature,然后单击 Next
  7. 选中 com.ibm.issw.antudn.feature,然后单击 Next
  8. 接受许可协议中的条款,然后单击 Next
  9. 选择功能的目标安装位置。在 Available Sites 中选择 C:\IBM\MessageBrokersToolkit\6.0\Eclipse
  10. 单击 Finish
  11. 关闭 Message Broker 工具包。

在运行时代理中安装 FileUdn 和 AntUdn

  1. 将文件 ComIbmIsswAntUdn.par 和 ComIbmIsswFileUdn.par 复制到 C:\IBM\MQSI\6.0\jplugin 目录,或代理计算机上的 jplugin 目录的等效位置。
  2. 重新启动 Message Broker。

导入方案

  1. 启动 Message Broker 工具包。出现提示时,选择工作区 C:\Resources\ScenarioWorkspace。此工作区提供了方案的消息流项目。
  2. 当工具包启动时,请选择 Window => Open Perspective => Broker Administration Perspective
  3. 打开名为 DynamicWSUpdate 消息流项目,浏览该消息流内容。
  4. 将代理存档文件 DynamicWSUpdate.bar 部署到运行时代理,然后在通过消息流运行消息前关闭工具包。必须关闭工具包,因为 Ant 构建文件将执行更新方案工作区的 Message Broker 命令实用工具。工作区中包含一个锁定文件,如果工具包打开,该文件将阻止这些 Headless 命令执行。这可避免破坏 Eclipse 项目元数据。

配置方案

如果将 Scenario.zip 文件解压缩到 C 驱动器根目录之外的其他目录,将需要在把流部署到代理前重新配置一些消息流节点属性。如果您将该文件解压到根目录,则可以跳到下面的第 5 步。

  1. 在 XML 转换节点 ExtractXSD 上设置属性 Stylesheet Directory。
  2. 在 FileUdn 节点上,属性 FileName 设置为 Output.xsd,属性 DirectoryName 设置为 C:\Resources\FileUdnOutput。后面一个值应与方案所使用的 Ant 构建文件 DynamicWSUpdate_AntBuild.xml 中的目标 createmsgdefs 匹配。
  3. 在 AntUdn 节点上,将属性 AntBuildFile 设置为构建文件 DynamicWSUpdate_AntBuild.xml 的位置。在缺省情况下,此属性值为 C:\Resources\DynamicWSUpdate_AntBuild.xml。同样在 AntUdn 节点上,将属性 AntLogFile 设置为日志文件 DynamicWSUpdate_AntBuild.xml 的位置。缺省情况下,此属性值为 C:\Resources\Logs\AntLog.log。
  4. 在 Ant 构建文件 DynamicWSUpdate_AntBuild.xml 中,名为“base”的属性设置为代理工具包的基础安装路径 C:\IBM\MessageBrokersToolkit\6.0\。如果您的代理安装在不同的位置,则请相应地修改此设置。
  5. Ant 构建文件的最后一部分与自动化命令 mqsideploy 有关。此命令必须指向您的域连接文件,以便部署操作能成功地定向到您的配置管理器。导入时,构建文件的预期设置为用一个名为 Servers 的项目包含文件 configdomain.configmgr 内的连接属性。可能必须更改这些参数,以与您的 Message Broker 安装匹配(Queue Manager name 设置为 QM1,Listener port 设置为 1414)。构建文件还设置为部署名为 BK1 的代理及其名为 default 的执行组。您可能希望对这些设置进行编辑。

方案的技术描述

本部分提供该方案的全面描述:

第 1 部分:IN => Convert => HTTPRequest

消息流中的前三个节点与连接到发布 WSDL 文档的 Internet URL 有关。计算节点名为 Convert,包含单个模块,该模块用于配置 LocalEnvironment 树,以控制后面的 HTTPRequest 节点的行为。HTTPRequest 节点将识别相应的值,并将据此向 Internet URL 发送一个 HTTP GET(而不是标准操作模式中的 HTTP POST)。这样,对 LocalEnvironment 的更改就不会在离开节点后丢失,请记得更改计算节点的 Compute Mode 属性。


清单 1. Convert 节点 ESQL
BEGIN
	CALL CopyEntireMessage();
	SET OutputLocalEnvironment.Destination.HTTP.RequestLine.Method = 
	'GET';
	SET OutputLocalEnvironment.Destination.HTTP.RequestURL = 	
	InputRoot.XMLNS.URL;
	RETURN TRUE;
END;
			

该 ESQL 还将 RequestURL 字段的值设置为输入消息的 URL 字段中的值。随本文提供的测试消息提供了一个 URL,该 URL 当前提供了一个 Internet 上可用的 WSDL 文档。显然,尽管这个地址在发布时是正确的,但将来可能会对其进行更改。

第 2 部分:Standardize => ExtractXSD

WSDL 文档提供了 Web 服务使用者和 Web 服务提供者之间的一个契约。其中的包含的信息包括服务接口、位置和绑定的完整规范信息。和所有最佳的开放标准策略一样,这个规范设计为不依赖于具体实现。出于这个原因,将使用一个 XML 模式定义来指定将在 Web 服务交互中交换的消息的准确格式。Message Broker 提供了使用新服务接口包装现有遗留系统的支持。为了提供此功能,Message Broker 要求使用详细信息来指定将接收、分析和验证的每个消息的元数据。Message Repository Manager (MRM) 域用于要求提供验证支持的环境中。在这些情况下,代理的安装中必须要有消息字典的部署,以方便进行解析。

本文描述了一个 Message Broker 解决方案,该解决方案允许对在 Internet 上发布的 WSDL 接口更改进行动态提取,然后部署到 Message Broker Web 服务客户机应用程序。如果 Web 服务提供者更改了用于与其 Web 服务请求者通信的消息格式,则必须在客户机代码中包含相应的更改。对于 Message Broker 包装消息流,此类更改要求重新部署消息集字典。这个新部署的第一步是从在线 WSDL 文档提取元数据。清单 2 显示了 WSDL 文档的基本组织结构。


清单 2. WSDL 文档的组织结构
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">  

	<wsdl:types>

		<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
			<xsd:complexType name=" ..." />
					...
		</xsd:schema>

	</wsdl:types>

	<wsdl:message ... >  ...  </wsdl:message>
	<wsdl:portType ... >  ...  </wsdl:portType>
	<wsdl:binding  ...  > ... </wsdl:binding>
	<wsdl:service  ...  >  ...  </wsdl:service>

</wsdl:definitions>
			

消息流的第 2 部分从 HTTP 节点作为逻辑树的一部分传递的 WSDL 文档提取模式。为了实现提出的可重用性目标和推广开放标准,我们选择使用 Message Broker 的 XML 转换节点来执行方案的这个阶段,该节点将使用 XSLT 样式表对逻辑树进行转换。

在调用样式表转换前,计算节点 Standardise 将对捕获的 WSDL 文档进行少量的修改。只有希望方案能使用各种公开发布的 WSDL 文档时才有必要使用此代码。当使用样式表转换节点时,样式表对 WSDL 中各个元素间的 XML 注释布局很敏感。ESQL 将从 WSDL 文档中删除所提取的 XSD 文件的开始位置以前的注释。通过更严格地控制向流提供的 WSDL 的准确语法,可以极大地降低方案的复杂性。

样式表将首先使用正则表达式 /* 匹配所传递的文档的根元素。所找到的 XML 元素将存储在变量 wibble 中,然后将其本地名称与定义进行比较,并将其命名空间与 http://schemas.xmlsoap.org/wsdl/ 进行比较。请注意比较中 XML 实体的用法,这种用法的目的是为了转义引号字符。随后将使用名为 wobble 的变量搜索定义的子元素,并与名为 types 的预期子元素进行比较。如果 HTTP 请求找到的位流成功地定位到一个有效且格式良好的 WSDL 文档,则 types 中将包含名为 Schema 的子元素,该子元素驻留在命名空间 http://www.w3.org/2001/XMLSchema 中。如果上面的检查得到了在 WSDL 中的正确级别嵌入的有效模式,会将该模式复制到数据逻辑树中。


清单 3. XSLT 样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" encoding="UTF-8"/>
		<xsl:template match="/*">       
	<xsl:variable name="wibble" select="."/>
	<xsl:if test="	local-name($wibble)="definitions" and
namespace-uri($wibble)="http://schemas.xmlsoap.org/wsdl/"">       
	<xsl:for-each select="./*">
	<xsl:variable name="wobble" select="."/>
	<xsl:if test="	local-name($wobble)="types" and
namespace-uri($wobble)="http://schemas.xmlsoap.org/wsdl/"">
	<xsl:for-each select="./*">
	<xsl:variable name="webble" select="."/>
	<xsl:if test="local-name($webble)="schema" and
namespace-uri($webble)="http://www.w3.org/2001/XMLSchema"">
	<xsl:copy-of select="."/>
	</xsl:if>
	</xsl:for-each>
	</xsl:if>
	</xsl:for-each>
		</xsl:if>	
		</xsl:template>           
</xsl:stylesheet>
			

第 3 部分:PrepareEnv => FileUdn

第 3 部分获取提取的模式文件,并使用用户定义的 File 输出节点将其写入到代理的本地文件系统。Message Broker 并不在其基本节点中提供这种形式的输出节点(读者如果有兴趣,可以了解有关 IBM 的 Message Broker File Extender 产品的更多信息)。该节点也作为本文随附的下载内容提供,包含两个强制属性:FileName 和 DirectoryName。这些属性指定应该将数据写入文件系统中的具体位置。要写入文件的缓冲区数据包括逻辑树的 global environment 部分的子元素的内容、named File。PrepareEnv 计算节点直接获取 Binary Large OBject (BLOB) 消息体(XML 转换节点的输出),并将其复制到树的 Environment.File 部分。这个额外的步骤可以方便地包含在 File 节点的 Java 代码中,但对于本文,我们选择尽可能将两个插件节点作为一般方法进行编码,以便尽可能提高其在此特定方案外的可重用性。

消息将不加更改地转发到 PrepareEnv 计算节点的输出终端。从流中的这一点来看,将消息体从一个节点传播到另一个节点并不会为节点的操作提供任何数据,而仅仅充当了执行 Ant 构建文件的触发器。

第 4 部分:AntUdn => OUT

此方案的最后一部分将使用用户定义 Java 节点,该节点编码为执行 Ant 构建文件。Apache Ant 框架提供了一个基于 Java 和 XML 的框架,用于自动化常见的构建任务。Ant 插件是一段通用代码,可成功运行任何符合 Ant 1.6.5 构建级别的 Ant 构建文件。随本方案提供的构建文件将导入由前面的节点写入到文件系统的 XML 模式文档,并在消息集项目中创建 Message Broker 消息定义文件。导入了模式后,构建文件将随后使用两个 Message Broker 命令行实用工具:mqsicreatebar 和 mqsideploy。mqsicreatebar 将生成包含经过编译的消息集字典的代理存档文件。

结束语

本方案通过使用适用的 Web 技术和开放标准从公共 Internet 网页上获取 WSDL 文档,然后更新在线代理的已部署消息集字典。随本文一起提供的用户定义 Java 节点对该方案外的消息流开发人员具有极大的价值。






回页首


下载

描述名字大小下载方法
Code sampleScenario.zip8.7 MB  FTP|HTTP
关于下载方法的信息


参考资料

学习

获得产品和技术


作者简介

作者照片

Ben Thompson 是位于英国 Hursley 的 IBM Software Group EMEA Laboratory Services 的咨询 IT 专家。他已从事了五年分布式事务中间件相关工作,并具有广泛的使用 WebSphere 产品投资组合为全球 IBM 客户设计和实现解决方案的经验。


Andy Piper 在英国担任 IBM Software Services for WebSphere 的高级 IT 专家。他的职责是为主要客户提供有关体系结构、设计和实现的咨询服务。他也曾是交付 WebSphere Message Broker Version 6 测试版程序的团队的一员,参与过新功能的开发,并提供过新功能的相关培训。Andy 是 IBM 红皮书《Migration to WebSphere Message Broker Version 5》的合著者,同时也是 SupportPac“IC04: WBIMB V5 Change Management and Naming Standards”的供稿人。您可以通过 andy.piper@uk.ibm.com 或他的博客 The lost outpost 与 Andy 联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款