【发布时间】:2015-01-05 12:57:49
【问题描述】:
我正在尝试使用 wsimport(或者更准确地说,我正在使用使用 wsimport 的 eclipse 向导)为 Web 服务生成新的服务器端类。源 WSDL 通过 ../ServiceName?wsdl URL 来自当前实现。
我的问题是,当我发布新类并导航到新的 ?wsdl URL 时,结果 WSDL 与原来的不同。当现有客户端尝试使用新版本的服务时,这似乎是导致错误的原因。以下是 WSDL 的一个小节,其中包含一个似乎会导致客户端出现问题的差异示例:
原文:
<wsdl:message name="executeResponse">
<wsdl:part element="impl:ServiceNameResult" name="ServiceNameResult"/>
</wsdl:message>
<wsdl:message name="executeRequest">
<wsdl:part element="impl:executeRequest" name="executeRequest"/>
</wsdl:message>
<wsdl:portType name="ServiceName">
<wsdl:operation name="execute" parameterOrder="executeRequest">
<wsdl:input message="impl:executeRequest" name="executeRequest"/>
<wsdl:output message="impl:executeResponse" name="executeResponse"/>
</wsdl:operation>
</wsdl:portType>
新:
<wsdl:message name="executeResponse">
<wsdl:part element="tns:ServiceNameResult" name="ServiceNameResult">
</wsdl:part>
</wsdl:message>
<wsdl:message name="execute">
<wsdl:part element="tns:executeRequest" name="executeRequest">
</wsdl:part>
</wsdl:message>
<wsdl:portType name="ServiceName">
<wsdl:operation name="execute">
<wsdl:input message="tns:execute" name="execute">
</wsdl:input>
<wsdl:output message="tns:executeResponse" name="executeResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
更改在 portType 输入消息中。它从“executeRequest”重命名为“execute”。
我无法弄清楚为什么这会改变或如何在 java 类中更正它。所有注释似乎都是正确的。
【问题讨论】:
-
您是否在 Eclipse 中使用 Apache Axis2、Apache Axis 或 Apache CXF 从 WSDL 生成 Java 类?
-
Apache CXF 我相信。但我不完全确定。当我发布它们时,它说它是一个 CXF Web 服务。我正在发布到 Liberty Profile。
-
@BuhakeSindi 我正在使用 IBM WebSphere JAX-WS。
-
不知道 IBM 为 JAX-WS 使用了什么实现。显然需要确定 WSDL 版本(1.1 或 2.0)以及它如何将 WSDL 解释为 Java Bean。
-
您需要继承
org.apache.cxf.service.factory.DefaultServiceConfiguration并覆盖getInputMessageName方法以将QName附加到"Request"。然后,您必须配置 CXF 以将服务配置指向您的子类。
标签: java web-services wsdl wsimport