Java 具有相同操作名称和输入类型的WSDL是否会生成不正确的客户端存根?

Java 具有相同操作名称和输入类型的WSDL是否会生成不正确的客户端存根?,java,web-services,wsdl,jax-ws,wsimport,Java,Web Services,Wsdl,Jax Ws,Wsimport,我有一个具有相同操作名和请求参数名的WSDL文件。当我使用WSDL文件生成客户机存根时,port类生成一个返回类型为void的方法。此外,请求参数从单个对象更改为该单个对象的内容 将WSDL文件上的操作名称更改为其他名称是有效的。但是,我认为修改WSDL文件是一种不好的做法。此外,我无法访问实际的web服务。因此,我也不能更改web服务上的实际操作名称 有没有一种方法可以使wsimport不会与操作名和请求参数名混淆?我尝试在wsimport中使用-B-XautoNameResolution属性

我有一个具有相同操作名和请求参数名的WSDL文件。当我使用WSDL文件生成客户机存根时,port类生成一个返回类型为void的方法。此外,请求参数从单个对象更改为该单个对象的内容

将WSDL文件上的操作名称更改为其他名称是有效的。但是,我认为修改WSDL文件是一种不好的做法。此外,我无法访问实际的web服务。因此,我也不能更改web服务上的实际操作名称

有没有一种方法可以使wsimport不会与操作名和请求参数名混淆?我尝试在wsimport中使用-B-XautoNameResolution属性,但没有解决问题

我的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>

此应用程序正在正常工作。 您所做的是参数处理的包装器样式。 另一种样式是bare styleSingle Part arguement,结果是1个java对象

当输入消息的单个部分的元素名和操作名相同时,它在将SOAP请求解组到Java时生成多个参数,而不是1个封装的Java对象。 这称为参数处理的包装器样式

<wsdl:part element="tns:transact" name="parameters"/>
<wsdl:operation name="transact">
WSDL绑定类型仍然保持文档样式,因为我们在XSD中使用单部分复杂类型

参考网址:

解决方案是更改以下2个XML条目

<xsd:element name="transactNew">
<wsdl:part element="tns:transactNew" name="parameters"/>

将transact更改为TransactionNew将使其与OperationNametransact不同,从而解决问题,因为操作名称和单个参数名称现在不同。

我在WSDL文件中没有看到tns:responsedata的定义。有吗?如果是这样的话,你能把它也发出去吗?@Xargos:谢谢!我已经更新了我的WSDL文件以包含responsedata。该WSDL看起来仍然不正确。element=tns:responsedata不指向任何XSD元素,因此为void。如果这是您的WSDL,那么生成的代码是正确的。我想你误解了我的问题。我知道问题发生的原因,这是因为操作名称和请求参数名称相同。我包含WSDL只是为了说明操作名和请求参数名是相同的,这就是我省略大部分WSDL部分的原因。您知道一种在wsimport中生成的方法,这样wsimport就不会将操作名与请求参数名混淆吗?谢谢所以,如果我这次理解正确的话,您遇到的问题是,您没有使用Transact对象作为输入参数,而是使用字符串to,字符串from?如果是这样,它应该仍然有效。我看到wsimport生成了非常奇怪的代码,例如Holder作为参数而不是返回字符串。我可能很难理解你的意思,因为你发布的内容对我来说似乎是正确的。一般来说,操作名和requestData元素具有相同的名称并不成问题,因为在协议中,它们之间没有相互崩溃的地方。
<xsd:element name="transactNew">
<wsdl:part element="tns:transactNew" name="parameters"/>