Я реализую клиент веб-службы, используя JAX-WS через SOAP. Его коды ошибок возвращаются следующим образом:
<?xml version = '1.0' encoding = 'UTF-8'?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<env:Header>
<!-- header stuff goes here -->
</env:Header>
<env:Body>
<env:Fault>
<abc:fault xmlns:abc="http://example.com/abc">
<abc:faultcode>12345</abc:faultcode>
<abc:faultstring>Error message goes here</abc:faultstring>
</abc:fault>
</env:Fault>
</env:Body>
</env:Envelope>
Насколько я знаю, это неправильный способ устранения ошибок SOAP. Подэлементами env:Fault должны быть <faultcode>
и <faultstring>
, а не другое пространство имен <fault>
. К сожалению, у меня нет возможности заставить веб-службу изменить это.
Я надеялся, что смогу проанализировать это сообщение в SOAPHandler и преобразовать его в обычную ошибку, прежде чем передать его остальной части моего кода, однако, когда я зарегистрировал сообщение в более раннем обработчике, я увидел, что элемент Fault полностью пустой. <abc:fault>
пропало!
Я использую JAX-WS в WebSphere 7 и пытался установить для параметра "jaxws.payload.highFidelity" значение true в свойствах моей системы. Любые подсказки о том, как добраться до исходного сообщения?
Если оставить это в покое, возникнет WebServiceException с NullPointerException, поскольку JAX-WS не сможет найти код ошибки.