【发布时间】:2012-10-24 22:49:09
【问题描述】:
这些参数有什么作用以及它们的用途是什么?
<service name="...">
<parameter name="wsdlPortType" value="..."/>
</service>
另外,如果有人能解释参数 wsdlServicePort、wsdlTargetNamespace 和 wsdlServiceElement,将不胜感激。
【问题讨论】:
这些参数有什么作用以及它们的用途是什么?
<service name="...">
<parameter name="wsdlPortType" value="..."/>
</service>
另外,如果有人能解释参数 wsdlServicePort、wsdlTargetNamespace 和 wsdlServiceElement,将不胜感激。
【问题讨论】:
Axis 1.4 用户指南:
当您在 Axis 中部署服务时,用户可以访问您的 使用标准 Web 浏览器并通过将“?WSDL”附加到服务的 URL 在 URL 的末尾,他们将获得一个自动生成的 WSDL 描述您的服务的文件。
实验结果表明,Axis 能够结合使用 .wsdd 部署描述符文件和已编译的 Java .class 文件来为给定服务生成相应的 .wsdl。有趣的是,例如,如果您有一个具有泛型返回类型(如 Map)的公共方法,则生成的 .wsdl 文件将不包含返回类型 - 它将包含“xsd:anyType”。我相信这是由于已编译的 .class 文件上的类型擦除所致。
无论如何,Axis .wsdd 文件中的服务选项(我在问题中引用的参数,例如 wsdlPortType、wsdlServicePort 和 wsdlTargetNamespace)与 .wsdl 规范有关。这可以从名称本身推断出来,因为它们都包含“wsdl”,但我想解释这些参数的含义,但我无法找到相关的 Axis 文档。以下是我的发现:
wsdlPortType(portType):基本类似于Java接口。每个方法名称包含一个“操作”元素。每个“操作”都包含“输入”和“输出”元素,它们基本上是您的 Java 方法的输入参数和返回参数。
wsdlServicePort (wsdl:binding) 与 portType 相关联。我认为它是对如何传输 portType 参数的描述。规范有这样的说法:
绑定描述组件提供了一个框架来指示 portType 描述组件的绑定详细信息。装订细节 应该用于指示消息在收到消息时必须如何格式化 发送到服务或从服务发送。它们也应该用来表示 用于发送消息的传输协议。一个给定的 绑定描述组件不能指示多个 协议。
wsdl:service:其中包含对 wsdl 端口绑定(portType 的实现)的引用。
目标命名空间:和我想象的差不多(与其他任何地方的命名空间相同)。它适用于所有 wsdl:definitions 组件,因此基本上是 wsdl 文件中的任何内容(wsdl:portType、wsdl:service 等)。不过,您可以在规范中找到其他一些规则。
【讨论】:
问题: 使用Service?wsdl时,生成的wsdl可能没有 相同的 targetNamespace、portType、服务元素名称,或 服务端口名称作为原始 wsdl。这个问题有 已被用户报告,属于 TCK 问题。
解决方案: 四个可选参数添加到 deploy.wsdd 和 由 JavaProvider 查询(wsdlTargetNamespace、wsdlServiceElement、 wsdlServicePort 和 wsdlPortType)。
Here is an example deploy.wsdd with the new parameters.
<!-- Services from AddressBookService WSDL service -->
<service name="AddressBook" provider="java:RPC">
<parameter name="wsdlTargetNamespace" value="urn:AddressFetcher2"/>
<parameter name="wsdlServiceElement" value="AddressBookService"/>
<parameter name="wsdlServicePort" value="AddressBook"/>
<parameter name="className" value="samples.addr.AddressBookSOAPBindingSkeleton"/>
<parameter name="wsdlPortType" value="AddressBook"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="scope" value="Session"/>
【讨论】: