2015-01-05 3 views
0

Я пытаюсь использовать wsimport (или, точнее, я использую мастер затмения, который использует wsimport) для создания новых классов на стороне сервера для веб-службы. Источником WSDL является текущая реализация через URL-адрес ../ServiceName?wsdl.wsimport создает классы, которые создают wsdl, который отличается от источника. Wsdl

Моя проблема заключается в том, что когда я публикую новые классы и перехожу к новому URL-адресу wsdl, результаты 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», чтобы просто «выполнить».

Я не могу понять, почему это изменилось или как исправить его в классах Java. Все аннотации кажутся правильными.

+0

Вы используете Apache Axis2, Apache Axis или Apache CXF в своем Eclipse для генерации Java-классов из WSDL? –

+0

Apache CXF Я верю. Но я не совсем уверен. Когда я публикую их, он говорит, что это CXF Webservice. Я публикую в Liberty Profile. – kutuzof

+0

@BuhakeSindi Я использую IBM WebSphere JAX-WS. – kutuzof

ответ

0

Похоже, что отсутствующий суффикс «Запрос» является функцией, а не ошибкой CXF. Что мне нужно сделать, это либо обновить мои клиенты или реализовать ServerSide перехватчики:

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

Это:

Вам нужно будет подкласс org.apache.cxf.service.factory.DefaultServiceConfiguration и переопределить метод getInputMessageName добавить QName с помощью «Запроса». Затем вам нужно будет настроить CXF, чтобы указать конфигурацию службы на ваш подкласс

Также представляется хорошим решением, если я могу выяснить, как это сделать. https://stackoverflow.com/questions/27818072/subclassing-defaultserviceconfiguration