2014-12-14 2 views
0

Я использую WSS4JInInterceptor в своей конечной точке для проверки авторизации.CXF SOAP JAX-WS WSS4JInInterceptor меняет пространство имен и вызывает ошибку Unmarshalling

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

Вот это мое 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

ответ

0

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

+0

Я не вижу 3.0.3 на главной странице. http://cxf.apache.org/download.html, но он находится в репозитории maven. Теперь я должен проверить его на регресс. Еще раз спасибо –

+0

Я отправлю еще один вопрос, но для того, чтобы сохранить здесь след. Теперь я могу обработать сообщение о мыле. но когда у меня есть ошибка проверки xsd (ограничение), как число <0, я получаю простой soapFault. Я использую commonValidationFeature. Как я могу получить сообщение об ошибке валидатора? –

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

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