2016-11-09 9 views
0

У меня есть проект Spring Boot, использующий CXF для создания веб-службы SOAP.Как заставить конечную точку JAX-WS принимать сообщения SOAP1.2

Отправка сообщений SOAP 1.1 (с использованием SOAPUI) работает нормально, но когда я пытаюсь отправить сообщение SOAP 1.2 (используя тот же WSDL, конечно), я получаю сообщение "A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint". Сообщение самообучающееся, но я не могу понять, почему моя конечная точка не принимает 1.2 сообщения.

My WSDL содержит правильные привязки и пространства имен для soap12.

В моем классе весной @Configuration я добавил это к конечной точке боба CXF:

endpoint.setBindingConfig(new BindingConfiguration() 
    { 
     @Override 
     public String getBindingId() 
     { 
      return SOAPBinding.SOAP12HTTP_MTOM_BINDING; 
     } 
    }); 

Это не помогло. Поскольку я стал более отчаянным, я попробовал как аннотации @BindingType, так и @SOAPBinding, которые, конечно же, не сработали, тогда я пробовал SaajSoapMessageFactory с SoapVersion.SOAP_12. Не работает. Я пробовал <extension>true</extension><protocol>Xsoap1.2</protocol> в моем jaxws-maven-plugin. Не смогли.

Конечная точка явно не настроена для приема сообщений SOAP 1.2. Как мне это достичь?

ответ

0

Я понял. Мне нужно было установить URL-адрес привязки при реализации конечной точки.По какой-то непонятной причине установка его впоследствии не сработала.

EndpointImpl endpoint = new EndpointImpl(springBus(), statusService(), SOAPBinding.SOAP12HTTP_BINDING); 
0

Похоже, что ваш запрос, который вы отправляете, попадает в конечную точку SOAP 1.1 вместо SOAP 1.2.

Если ваш WSDL был построен с использованием подхода сверху вниз, убедитесь, что SOAP Binding для SOAP 1.2 существует в wsdl. Также порт (wsdl: port) для SOAP 1.2 должен появиться под wsdl: service в wsdl.

Если он был построен с использованием подхода снизу вверх убедитесь, что это аннотацию @BindingType (значение = SOAPBinding.SOAP12HTTP_MTOM_BINDING) на вашем SIB, когда MTOM включен в противном случае использовать @BindingType (значение = javax.xml.ws.soap.SOAPBinding. SOAP12HTTP_BINDING).

Затем на поколении клиента wsdl, используя ваш плагин maven, обязательно используйте <extension>true</extension>.

После выше, например, если вы используете WSDL с 2 портами в WSDL: раздел службы, как показано ниже:

<wsdl:service name="TestService"> 
     <wsdl:port name="TestPortSoap11" binding="tns:TestPort12Binding"> 
      <soap:address location="http://127.0.0.1:8081/testSoap11Endpoint"/> 
     </wsdl:port> 
     <wsdl:port name="TestPortSoap12" binding="tns:TestPort12Binding"> 
      <soap12:address location="http://127.0.0.1:8081/testSoap12Endpoint"/> 
     </wsdl:port> 
    </wsdl:service> 

Для того, чтобы использовать SOAP 1.2 конечной точки убедитесь, что вы получите экземпляр службы позвонив по телефону что-то вроде:.

TestPortType testService = new TestService().getTestPortSoap12(); 

Пожалуйста, обратите внимание на текст жирного «нового TestService() получить TestPortSo ap12() "соответствует названию SOAP 1.2 имя порта в wsdl.

ИЛИ в конфигурации клиента веб-службы убедитесь, что адрес конечной точки вы используете указывает на порт SOAP 1.2 и в нашем случае, например, это http://127.0.0.1:8081/testSoap12Endpoint не http://127.0.0.1:8081/testSoap11Endpoint.

Если эти шаги терпят неудачу, любезно обменивайтесь фрагментом wsdl (показывая раздел wsdl: service) и конфигурациями весны веб-службы @Configuration.

+0

Это не было моей проблемой. Как я уже сказал в своем оригинальном посте, у меня есть правильные привязки и пространства имен для SOAP 1.2. Я также упомянул об использовании элемента расширения без успеха. Однако я сам решил эту проблему. См. Мой ответ. – Roger

+0

Это хорошие новости. –

 Смежные вопросы

  • Нет связанных вопросов^_^