8

我正在尝试在 java 中开发一个表单生成器,用户将能够在其中编写一个 wsdl url 并在 ComboBox 中获取 Web 服务支持的操作列表。当用户选择 ComboBox 中的一项时,他将看到使用 wsdl url 生成的表单字段。

我是网络服务技术的新手,在网上搜索了网络服务解析器后,我决定使用轴库。但是我真的不知道应该解析wsdl文档的哪一部分

我不是要创建 web 服务的 java 类,我必须为任何 wsdl url 生成表单字段。

例如,这是一个提供 9 个操作的 Web 服务

http://services.aonaware.com/DictService/DictService.asmx

wsdl 文件在这里:

http://services.aonaware.com/DictService/DictService.asmx?WSDL

我需要知道应该解析 wsdl 文件的哪些部分,任何帮助将不胜感激。

4

4 回答 4

8

要开始使用 WSDL 并了解此类文档的结构,您可能应该查看一些文章,例如了解 WSDLWSDL 教程或您可以在 Google 上找到的任何其他初学者资源。

现在,要以简化的方式回答您的问题,您必须从portType包含以下内容的元素开始:

一个或多个端点支持的一组抽象操作(通常称为接口);操作由消息交换定义

例如,在您的情况下:

<wsdl:operation name="DictionaryList">
  <wsdl:documentation>Returns a list of available dictionaries</wsdl:documentation>
  <wsdl:input message="tns:DictionaryListSoapIn"/>
  <wsdl:output message="tns:DictionaryListSoapOut"/>
</wsdl:operation>

而且,对于每个操作,您都需要解析输入和输出消息,即message

可能由多个部分组成的抽象消息的定义,每个部分可能属于不同的类型。

在这里,例如上一个操作的输入消息是:

<wsdl:message name="DictionaryListSoapIn">
  <wsdl:part name="parameters" element="tns:DictionaryList"/>
</wsdl:message>

然后,要了解消息的内容,请查看types

使用 XML Schema 定义的抽象类型定义的容器

在这里,DictionaryList元素被定义为一个空的 compleType:

<s:element name="DictionaryList">
  <s:complexType/>
</s:element>

正如我所说,这确实是一个非常简化的答案,因为 WSDL 不能用四段来概括,而且老实说,您要做的事情确实不是一件容易的事。让我换个说法:会有血!因此,即使这几行代码可以帮助您(很少)开始,我也绝对不会从头开始这样的项目,而是使用现有的库或工具(如Xydra或 Eclipse XML Forms Generator或... ) 这将允许不重新发明轮子。

顺便说一句,我注意到您已决定使用 Axis,并且您不想生成 Java 类,但我强烈建议您不要使用 Axis。实际上,我会使用 Java 6 中捆绑的 JAX-WS RI,它是一个更简单的 API。以防万一,要生成 Java 类,只需执行:

$ mkdir generated
$ wsimport -d generated http://services.aonaware.com/DictService/DictService.asmx?WSDL
于 2009-12-29T00:23:27.117 回答
3

这是 Thomas Bayer http://www.predic8.com/wsdl-reading.htm关于“阅读 wsdl 文件”的一个很好的教程

于 2010-01-09T13:35:44.390 回答
1

这不是一个简单的项目,您可能会发现已经这样做的库将是您的最佳方法,但开始的地方是将属性映射到 HTML FORM 组件,并将 Min/Max Occues 映射到 JavaScript 事件。

根据您对 WSDL 的理解,编写 FORM 可能会容易得多。至于可以提供帮助的东西,您可以使用类似的东西

http://www.soapui.org/

或者对于基于网络的东西(我刚刚用你的 WSDL 测试过并且它有效)你可以尝试

http://www.soapclient.com/soaptest.html

我知道这两个链接可能完全不符合您想要完成的目标,所以祝您在应对这一挑战的努力中好运 :)

于 2009-12-28T23:46:14.730 回答
1

我不能代表 WSDL 方面,但您可以考虑将Metawidget用于表单生成方面:一旦您提取并解析了 WSDL,您可以将其推送到 Metawidget 并免费获得很多 UI 优点(支持不同的平台、不同的小部件库等)

问候,

理查德。

于 2010-01-29T03:41:38.077 回答