Веб-служба JAX WS получает нулевые параметры, когда элементы средства доступа к части квалифицируются с помощью пространств имен - PullRequest
1 голос
/ 22 марта 2012

Я реализовал веб-сервис с использованием Netbeans 7.0 и JAX-WS.

Когда веб-сервис вызывается из Soap UI, он работает как надо. При вызове SAP CRM реализация веб-службы получает нулевые параметры: в приведенном ниже примере userId имеет значение null вместо «foo». (ИД пользователя имеет тип String)

SOAP-сообщение, отправляемое интерфейсом SOAP:

   <?xml version="1.0" encoding="UTF-8" ?> 
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:IciSystemInterface">
       <soapenv:Header>
       </soapenv:Header>
       <soapenv:Body>
          <urn:getWorkcenterCapability>
             <userId>foo</userId>
          </urn:getWorkcenterCapability>
       </soapenv:Body>
    </soapenv:Envelope>

SOAP-сообщение, отправленное SAP CRM:

    <?xml version="1.0" encoding="UTF-8" ?> 
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Header>
      <pre:user xmlns:pre="urn:IciSystemInterface" SOAP-ENV:mustUnderstand="0" xsi:type="xsd:string">IC_AGENT_SRV</pre:user> 
      <pre:language xmlns:pre="urn:IciSystemInterface" SOAP-ENV:mustUnderstand="0" xsi:type="xsd:string">EN</pre:language> 
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
     <ns0:getWorkcenterCapability xmlns:ns0="urn:IciSystemInterface">
       <userId xmlns="urn:IciSystemInterface">foo</userId> 
     </ns0:getWorkcenterCapability>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

Если я удаляю свойство xmlns из тега userId, оно работает (я внес изменение и проверил его, вызвав веб-службу с помощью HTTP-клиента):

    <ns0:getWorkcenterCapability xmlns:ns0="urn:IciSystemInterface">
       <userId>foo</userId> 
    </ns0:getWorkcenterCapability>

Проблема в том, что я не могу изменить способ, которым SAP CRM выполняет свои вызовы. Есть ли способ заставить JAX WS игнорировать пространства имен элементов доступа к элементам?

Заранее спасибо.

1 Ответ

0 голосов
/ 24 марта 2012

Я последовал совету @ Брандена.Я использовал SoapHandler для перехвата вызовов веб-службы и обработки сообщения мыла до того, как JAX-WS вызовет мою реализацию веб-службы.Это сработало.

...