wsimport创建的类生成的wsdl与源wsdl不同

时间:2015-01-05 12:57:49

标签: java web-services wsdl wsimport

我尝试使用wsimport(或者更准确地说,我使用使用wsimport的eclipse向导)为web服务生成新的服务器端类。源WSDL来自当前实现,通过../ServiceName?wsdl URL。

我的问题是,当我发布新类并导航到新的?wsdl URL时,结果WSDL与原始URL不同。当现有客户端尝试使用新版本的服务时,这似乎是错误的原因。以下是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输入消息中。它从&#34; executeRequest&#34;重命名。简单地执行&#34;。

我无法弄清楚为什么会改变或如何在java类中纠正它。所有的注释都是正确的。

1 个答案:

答案 0 :(得分:0)

似乎缺少“请求”后缀是一个功能,而不是CXF的错误。我需要做的是更新我的客户端或实现服务器端拦截器:

http://cxf.apache.org/docs/interceptors.html

这:

您需要子类化org.apache.cxf.service.factory.DefaultServiceConfiguration并覆盖getInputMessageName方法以使用“Request”附加QName。然后,您必须配置CXF以将服务配置指向您的子类

如果我能弄清楚如何做到这一点,似乎也是一个很好的解决方案。 https://stackoverflow.com/questions/27818072/subclassing-defaultserviceconfiguration