Я использую 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
Я не вижу 3.0.3 на главной странице. http://cxf.apache.org/download.html, но он находится в репозитории maven. Теперь я должен проверить его на регресс. Еще раз спасибо –
Я отправлю еще один вопрос, но для того, чтобы сохранить здесь след. Теперь я могу обработать сообщение о мыле. но когда у меня есть ошибка проверки xsd (ограничение), как число <0, я получаю простой soapFault. Я использую commonValidationFeature. Как я могу получить сообщение об ошибке валидатора? –