Я реализовал веб-сервис с использованием 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 игнорировать пространства имен элементов доступа к элементам?
Заранее спасибо.