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

developerWorks 中国  >  XML | Open source | SOA and Web services  >

模型驱动的 XML 表单生成,第 2 部分: 为 Web 服务生成表单

使用 XML Forms Generator 直接从 WSDL 文档生成表单

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 高级

Jan J. Kratky (kratky@us.ibm.com), 咨询软件工程师, IBM
Kevin E. Kelly (kekelly@us.ibm.com), 高级软件工程师, IBM
Steve K Speicher (sspeiche@us.ibm.com), 高级软件工程师, IBM
Keith Wells (wellsk@us.ibm.com), 咨询软件工程师, IBM

2005 年 9 月 20 日

进一步考察 XML Forms Generator。本系列分为两部分,第 1 部分介绍了这种 alphaWorks 技术如何利用模型驱动开发概念和 Eclipse Modeling Framework (EMF) 来从 XML 实例数据生成表单。第 2 部分中,作者介绍了 XML Forms Generator 如何从 Web 服务描述语言 (WSDL) 文档生成表单。

在本系列教程的 第 1 部分 中,我们详细描述了 XML Forms Generator 从 XML 实例文档生成符合标准的表单的能力。我们介绍了自动化表单生成来加快表单的开发,以及模型驱动开发技术在自动化中的作用。

除了 XML 实例数据以外,还必须加上另一种常用的数据描述机制,即 WSDL。通过利用 WSDL 的 EMF 模型和 XML Schema,也可以从 WSDL 文档直接生成表单,甚至生成意义明确的表单提交响应页面。

XML Forms Generator 只能从源 WSDL 文档自动生成 XHTML/XForms 文档。XML Forms Generator 发行版还包括生成和测试 Java Server Page(JSP) Web 服务响应模板的工具。

生成的表单符合 XHTML 和 XForms 1.0 标准,可使用常见的 XHTML/XForms 呈现工具来查看。

本文描述的工具无缝集成到开放源码的 Eclipse 工具平台,可通过 XML Forms Generator 从 IBM alphaWorks 免费获得。

从 WSDL 生成表单

与 XML 实例文档一样(参阅 第 1 部分),XML Forms Generator 也采用模型驱动的方法从 WSDL 文档生成表单。Generator 把 WSDL 文档属性(操作、消息部分、类型定义,等等)读入由 WSDL 的 EMF 模型和 XML Schema 确定的运行时 Java™ 结构。因此,结构促进 WSDL 文档的分析,允许创建原型化的 XML 实例文档,该文档又(在幕后)驱动生成要部署的功能表单。

缩写形式

DTD —— 文档类型定义
EMF —— Eclipse Modeling Framework
JSP —— Java Server Page
JSTL —— Java 标准标签库
MDA —— 模型驱动的体系结构
MDD —— 模型驱动的开发
UML —— 统一建模语言
W3C —— 万维网联盟
XHTML —— 可扩展超文本标记语言
XMI —— XML 模型交换
WSDL —— Web 服务描述语言

得到的表单可直接提交给 Web 服务端点。但是要注意,XForms 1.0 Recommendation 没有特别要求调用一定成功,因此可能需要包括一个中间件进行调解。XML Forms Generator 发行版带有一个 Java 2 Platform, Enterprise Edition (J2EE) Web 应用程序,包含的一对 servlet 为这种中间层解决方案提供了简单的示范(请参阅 参考资料)。

此外,因为 WSDL 文档编码了作为服务调用响应而发送的数据的结构,可以生成模板显示调用 WSDL 定义的 Web 服务操作的响应。生成响应模板有多种可能的方法,如 XSLT,甚至通过它的 switch/case 机制使用 XForms 本身也能实现。为了示范 J2EE 环境中的交互,目前的 XML Forms Generator 版本使用 JSP 文件生成响应模板。

生成请求表单

为了避免多次提交表单的复杂性,XML Forms Generator 要求用户选择一个操作来生成表单。它读入 WSDL 文档,确定可能的操作,然后显示一个包含操作列表的向导页面,必须从中选择一个操作(如图 1 所示)。


图 1. 选择 WSDL 文档中定义的操作
选择 WSDL 文档中定义的操作

XML Forms Generator 还进一步分析,以便选择表单的默认提交目标,即实际的服务端点 URL。


图 2. 表单的默认提交目标优先于匹配服务地址
表单的默认提交目标优先于匹配服务地址

清单 1 中,通过分析 WSDL 文档中声明的 service 元素来发现端点:


清单 1. 包含 service 元素的 WSDL 代码

<service name="GoogleSearchService">
    <port name="GoogleSearchPort" binding="typens:GoogleSearchBinding">
        <soap:address location="http://api.google.com/search/beta2"/>
    </port>
</service>

通过分析所选操作的输入消息部分,以及 WSDL types 部分 XML Schema 中定义的类型,生成原型化的 XML 实例文档,其中包含可以在请求消息中提交的全部数据。清单 2 显示了只有一项操作的简单 WSDL portType 声明以及操作的输入消息定义:


清单 2. WSDL portType 声明

<portType name="GoogleSearchPort">
    <operation name="doSpellingSuggestion">
        <input message="typens:doSpellingSuggestion"/>
        <output message="typens:doSpellingSuggestionResponse"/>
    </operation>
</portType>
<message name="doSpellingSuggestion">
    <part name="key"            type="xsd:string"/>
    <part name="phrase"         type="xsd:string"/>
</message>

从这个输入消息声明,XML Forms Generator 生成一个 XML 实例文档(清单 3),然后从这个文档创建 XHTML/XForms 工作文档。实例文档本身是一个 SOAP 信封,可以直接调用 Web 服务,提交表单前不需要对实例进行专门处理。


清单 3. XML 实例文档

<?xml version="1.0" encoding="ASCII"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
            encodingStyle="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <typens:doSpellingSuggestion xmlns:typens="urn:GoogleSearch"
                xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
                xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <typens:key xsi:type="xsd:string"/>
            <typens:phrase xsi:type="xsd:string"/>
        </typens:doSpellingSuggestion>
    </soap:Body>
</soap:Envelope>

XML Forms Generator 还可以理解更复杂的类型定义,从 RPC 文字风格和文档文字风格的服务定义生成表单。

图 3 是从清单 3 所示例子得到的表单,使用 Internet Explorer 的 formsPlayer 插件(参见 参考资料)来呈现:


图 3. 为一个 WSDL 操作生成的表单
为一个 WSDL 操作生成的表单

服务调用的中间层

如果表单直接从浏览器提交给 Web 服务,浏览器收到的响应本身将是一个 SOAP 信封。可以预料信封只能呈现为原始的 XML 标记。


图 4. 表单提交的 SOAP 响应的原始 XML
表单提交的 SOAP 响应的原始 XML

要创建响应的可呈现版本,最简单的办法是插入一个中间层,负责发出真正的调用并把 SOAP 信封转化成可呈现的 XHTML 标记。


图 5. 服务调用的 servlet 中间层
服务调用的 servlet 中间层

为了论证这种方法的优缺点,XML Forms Generator 发行版中的一个 Web 应用程序包含完成此项任务的 servlet。该 servlet 分析 Web 服务响应信封,提取数据,然后用可呈现的 XHTML 标记包装数据:


图 6. servlet 提供的可呈现响应
servlet 提供的可呈现响应

虽然现在终端用户可以查看响应数据(如图 6 所示),但是表示机制完全和调用机制搅在了一起。为了建立更加灵活的体系结构,以便支持 J2EE“model 2”体系结构模式所倡导的模型-视图-控制器的划分方式,需要单独的模板来提供响应视图。

响应模板

如前所述,XML Forms Generator 允许使用 WSDL 文档创建 JSP 响应模板。Java Standard Tag Library (JSTL) 元素询问响应信封的 XML。清单 4 是生成的 JSP 标记的典型片段:


清单 4. 生成的 JSP 标记

<?xml version="1.0" encoding="ASCII"?>
<jsp:root xmlns:jsp=http://java.sun.com/JSP/Page
          xmlns:x="http://java.sun.com/jsp/jstl/xml" version="2.0">
...
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <title>
                WSDL Response Template: doSpellingSuggestion Response
            </title>
            <link href="gen_default.css" rel="stylesheet"/>
        </head>
        <body>
            <h1>doSpellingSuggestion Response</h1>
            <p><b>Return</b></p>
            <p><x:out select="$myDOM//return"/></p>
        </body>
    </html>
</jsp:root>

虽然最初的可视化表示和上面的纯 servlet 方法生成的表单没有明显区别,但是现在开发人员或设计师可以对响应页面作任何修改了。XML Forms Generator 已经完成了构造基本表单元素并使用 XPath 表达式将其与数据匹配的工作。


图 7. JSP 响应模板支持的更符合 model-2 结构的流
JSP 响应模板支持的更符合 model-2 结构的流




回页首


与 Eclipse 集成

与 Eclipse 插件一样,XML Forms Generator 与 Eclipse 和基于 Eclipse 的产品紧密结合在一起,提供了方便的用户界面元素,包括上下文菜单、向导和首选页。

各种不同的选项可以控制生成表单的标题和题目文本、样式表、提交目标、循环深度、textarea 生成,等等。

XML Forms Generator 还允许在 Compound XML Document Editor 中使用与在本系列 第 1 部分 所述相同的机制,在各种不同的呈现工具中快速呈现生成的表单。

多数情况下,只要点几次鼠标就能生成可工作的表单。事实上,XML Forms Generator 为 WSDL 文档提供了“Generate All”选项,一次生成 XML 实例文档、表单和响应 JSP 模板。


图 8. WSDL 文档的生成选项
WSDL 文档的生成选项




回页首


结束语

XML Forms Generator 利用模型驱动开发的概念和 EMF 来从 Web 服务的 WSDL 描述生成表单。虽然 XForms 1.0 没有要求 Web 服务调用支持(XForms 1.1 将要求该支持),仍然有多种方法对 Web 服务使用 XForms,就像我们所示范的那样。本文中的例子所生成的表单可马上对服务端点进行调用。

作为一种基于标准的、模型驱动的工具,XML Forms Generator 可以迅速为 Web 服务生成可使用的表单,从而比任何面向服务体系结构(SOA)中的表单开发领先一步。

致谢: 感谢 IBM 的 Kelvin Lawrence 和 Henry Tran。



参考资料

学习

获得产品和技术


作者简介

Jan Joseph Kratky 是 Compound XML Document Editor 和 XML Forms Generator 的首席开发人员。他目前是位于北卡罗来纳州 Research Triangle Park 的 IBM Emerging Software Standards 的软件工程师,他从 Cornell University 获得了学士学位,并从 Rensselaer Polytechnic Institute 获得了硕士学位。Jan 是 Sun 认证的 Java 程序员和 Web 组件开发人员,他从 1997 年开始使用 Java 技术,并从 2001 年开始接触 Eclipse 技术。


Kevin E. Kelly 是一位从事软件标准的 IBM Corporation 高级软件工程师。Kevin 是 W3C XForms 工作组和 W3C Compound Document Format 工作组的成员。他主要致力于客户机技术和基于开放标准的演化技术,通过基于 XML 的方法和模型驱动的方法推动更快、更有效的标准采用。加入 IBM 之前,Kevin 在 Rational Software 工作了八年,从事 UML 建模和 Java 技术。Kevin 拥有 Mercer 大学的学士学位和 Montana 大学的硕士学位。


Steve Speicher 是位于北卡罗来纳州 Research Triangle Park 的 IBM 高级软件工程师。Steve 参与了 Emerging Technologies,多年以来,他一直在开发应用程序开发工具。


Keith Wells 是 IBM RTP 的一位软件开发人员。Keith 参与 Emerging Technologies 和 Emerging Technologies Toolkit 已经有几年的时间了。




对本文的评价

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

建议?







回页首


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