JAX-WS Принудительно использовать префикс xmlns в запросе SOAP? - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть веб-сервис ASP.NET 2.0, который вызывается из JAX-WS 2.1. Если я тестирую с SOAP UI, это работает. SOAP UI генерирует запрос вида

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sup="abc.123">
   <soapenv:Header/>
   <soapenv:Body>
      <sup:Method>
         <sup:element>GBA</sup:element>
         <sup:attributes>
            <sup:Attribute>
               <sup:attributeName>XYZ</sup:attributeName>
               <sup:attributeValue>123</sup:attributeValue>
            </sup:Attribute>
         </sup:attributes>
         <sup:nop>abc</sup:nop>
         <sup:data>1</sup:data>
      </sup:Method>
   </soapenv:Body>
</soapenv:Envelope>

Это работает правильно, и веб-сервис получает и правильно обрабатывает данные. Однако клиент JAX-WS создает запрос в форме

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <Method xmlns="abc.123">
      <element>
        <name>GBA</name>
      </element>
      <attributes>
        <Attribute>
          <attributeName>XYZ</attributeName>
          <attributeValue>123</attributeValue>
        </Attribute>
      </attributes>
      <nop>abc</nop>
      <data>1</data>
    </Method>
  </soapenv:Body>
</soapenv:Envelope>

Это не работает правильно. Веб-сервис ASP.NET интерпретирует все параметры , кроме element, как null. Очевидно, что это приводит к сбою обработки. Сообщение возвращается и правильно интерпретируется прокси-сервером JAX-WS.

Как я могу заставить JAX-WS (либо в поколении клиента, либо в коде) использовать префикс пространства имен? В качестве альтернативы есть способ сообщить ASP.NET, как интерпретировать сообщение SOAP как есть


До сих пор я читал о JAX-WS, и кажется, что есть множество вариантов настройки созданной java, но я не нашел никаких параметров или правил привязки для настройки того, как он создает SOAP.

Единственное, что я нашел многообещающим, - это использование SoapHandler для ручного редактирования конструкции xml, как было предложено в этого ответа . Однако это включает в себя написание кода для обхода DOM и добавления префикса к каждому узлу. Я еще не опробовал эту опцию ...

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Клиент был создан с использованием старой версии WSDL. Использование текущей версии WSDL решило проблему.

Всегда проверяйте, чтобы WSDL для клиента и сервера совпадали.

0 голосов
/ 11 ноября 2011

Атрибут <element> отличается между первым сообщением и вторым. Это будет источником проблемы.

Пользовательский интерфейс SOAP:

  ...
  <sup:element>GBA</sup:element>  

JAX-WS:

   ....
  <element> 
    <name>GBA</name> 
  </element> 

Пространства имен xml эквивалентны. Сами имена элементов отличаются.

...