CXF SOAP JAX-WS WSS4JInInterceptor изменяет пространство имен и вызывает ошибку Unmarshalling

Я использую WSS4JInInterceptor в своей конечной точке для проверки авторизации.

У меня это есть в моей конечной точке

Вот мое SOAP-сообщение

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
          <wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                 <wsse:UsernameToken wsu:Id="UsernameToken-1">
                       <wsse:Username>username</wsse:Username>
                       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
                 </wsse:UsernameToken>
          </wsse:Security>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
          <newAsset xmlns="http://api.com.acme/">
                 <date xmlns="">2018-02-04T14:35:59Z</date>
                 <assetId xmlns="">1</assetId>
          </newAsset>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Я отслеживаю сообщение в WSS4JInInterceptor и обнаруживаю, что полученное сообщение SOAP было переписано на: (заменено пустое пространство имен)

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
          <wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                 <wsse:UsernameToken wsu:Id="UsernameToken-1">
                       <wsse:Username>username</wsse:Username>
                       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
                 </wsse:UsernameToken>
          </wsse:Security>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
          <newAsset xmlns="http://api.com.acme/">
                 <date xmlns="http://api.com.acme/">2018-02-04T14:35:59Z</date>
                 <assetId xmlns="http://api.com.acme/">1</assetId>
          </newAsset>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

и это вызывает неупорядочивающую ошибку.

НО

если я сделаю небольшое изменение (добавлю префикс) в свое SOAP-сообщение, чтобы вместо этого отправить это, WSS4JInInterceptor не изменит пространство имен по умолчанию, и сообщение будет принято.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
          <wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                 <wsse:UsernameToken wsu:Id="UsernameToken-1">
                       <wsse:Username>username</wsse:Username>
                       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
                 </wsse:UsernameToken>
          </wsse:Security>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
          <api:newAsset xmlns:api="http://api.com.acme/">
                 <date xmlns="">2018-02-04T14:35:59Z</date>
                 <assetId xmlns="">1</assetId>
          </api:newAsset>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

есть способ избежать этого? Первое сообщение было действительным, поэтому его следует принять. Должен ли я что-то вставлять в свой xsd? Я использовал неквалифицированный. Я использую CXF 3.0.0


person Sebastien Dionne    schedule 14.12.2014    source источник


Ответы (1)


Обновитесь до CXF 3.0.3 и посмотрите, не исчезнет ли ошибка. Я думаю, что были некоторые проблемы, связанные с этим, которые были недавно исправлены. Если это все еще не удается, пожалуйста, зарегистрируйте ошибку с помощью тестового примера.

person Daniel Kulp    schedule 15.12.2014
comment
Я не вижу 3.0.3 на главной странице. cxf.apache.org/download.html, но он находится в репозитории maven. Теперь я должен проверить его на регрессию. еще раз спасибо - person Sebastien Dionne; 15.12.2014
comment
Я отправлю еще один вопрос, но просто чтобы следить и здесь. Теперь я могу обработать полученное мыльное сообщение. но когда у меня есть ошибка проверки xsd (ограничение), например число ‹0, я получаю простой soapFault. Я использую commonValidationFeature. Как я могу получить сообщение об ошибке валидатора? - person Sebastien Dionne; 15.12.2014