这些参数有什么作用以及它们的用途是什么?
<service name="...">
<parameter name="wsdlPortType" value="..."/>
</service>
此外,如果有人能解释参数 wsdlServicePort、wsdlTargetNamespace 和 wsdlServiceElement,将不胜感激。
Axis 1.4 用户指南:
当您在 Axis 中部署服务时,用户可以使用标准 Web 浏览器访问您的服务的 URL,并通过在 URL 的末尾附加“?WSDL”,他们将获得一个自动生成的描述您的服务的 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 参数的描述。规范有这样的说法:
绑定描述组件提供了一个框架,用于指示端口类型描述组件的绑定细节。绑定详细信息应该用于指示消息在发送到服务或从服务发送时必须如何格式化。它们还应该用于指示用于发送消息的传输协议。给定的绑定描述组件不得指示多个协议。
wsdl:service:其中包含对 wsdl 端口绑定(portType 的实现)的引用。
目标命名空间:和我想的差不多(与其他任何地方的命名空间相同)。它适用于所有 wsdl:definitions 组件,因此基本上是 wsdl 文件中的任何内容(wsdl:portType、wsdl:service 等)。不过,您可以在规范中找到其他一些规则。
问题:使用Service?wsdl 时,生成的wsdl 可能与原始wsdl 的targetNamespace、portType、服务元素名称或服务端口名称不同。此问题已被用户报告,属于 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"/>