我有一个具有相同操作名称和请求参数名称的 WSDL 文件。当我使用 WSDL 文件生成客户端存根时,端口类会生成一个返回类型为 void 的方法。此外,请求参数从单个对象更改为该单个对象的内容。
将 WSDL 文件上的操作名称更改为不同的名称是可行的。但是,我认为修改 WSDL 文件是一种不好的做法。此外,我无法访问实际的 Web 服务。因此,我也无法更改 Web 服务上的实际操作名称。
有没有一种wsimport
不会与操作名称和请求参数名称混淆的方法?我尝试-B-XautoNameResolution
在 wsimport 中使用该属性,但它没有解决问题。
我的 WSDL 文件如下所示:(如您所见,操作名称和请求参数名称都使用名称 'transact')
<xsd:schema targetNamespace="http://com.example">
<xsd:element name="transact">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="from" type="xsd:string"></xsd:element>
<xsd:element name="to" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<wsdl:message name="requestdata">
<wsdl:part element="tns:transact" name="parameters"/>
</wsdl:message>
<wsdl:message name="responsedata">
<wsdl:part element="tns:responsedata" name="parameters"/>
</wsdl:message>
<wsdl:portType name="portname">
<wsdl:operation name="transact">
<wsdl:input message="tns:requestdata"/>
<wsdl:output message="tns:responsedata"/>
</wsdl:operation>
</wsdl:portType>
结果类是这样的:(返回类型是 void 并且即使输入类型在 中声明,但RequestWrapper
在 transact 方法中声明的方法并不是对象本身。)
@WebMethod(action = "http://com.example/transact")
@RequestWrapper(localName = "transact", targetNamespace = "http://com.example", className = "com.example.Transact")
@ResponseWrapper(localName = "transactresponse", targetNamespace = "http://com.example", className = "com.example.TransactResponse")
public void transact(
@WebParam(name = "to", targetNamespace = "")
String to,
@WebParam(name = "from", targetNamespace = "")
String from);