I am using spring-ws-2.3.1, While creating client for webservices sometime i am getting SoapFaultClientException like below,
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>There was a problem with the server so the message could not proceed</faultstring>
<faultactor>InvalidAPI</faultactor>
<detail>
<ns0:serviceException xmlns:ns0="http://www.books.com/interface/v1">
<ns1:messageId xmlns:ns1="http://www.books.org/schema/common/v3_1">5411</ns1:messageId>
<ns1:text xmlns:ns1="http://www.books.org/schema/common/v3_1">Locale is invalid.</ns1:text>
</ns0:serviceException>
</detail>
</SOAP-ENV:Fault>
I am trying to get the "messageId" and "Text" of the ServiceException but i couldn't.Please find the code below,
catch (SoapFaultClientException ex) {
SoapFaultDetail soapFaultDetail = ex.getSoapFault().getFaultDetail(); // <soapFaultDetail> node
// if there is no fault soapFaultDetail ...
if (soapFaultDetail == null) {
throw ex;
}
SoapFaultDetailElement detailElementChild = soapFaultDetail.getDetailEntries().next();
Source detailSource = detailElementChild.getSource();
Object detail = webServiceTemplate.getUnmarshaller().unmarshal(detailSource);
System.out.println("Detail"+detail.toString());//This object prints the jaxb element
}
The "detail" object returns the JaxbElement.Is there any elegant way to parse the soap fault.
Any help should be appreciated.
Finally,I can able to parse the soap fault exception,
catch (SoapFaultClientException ex) {
SoapFaultDetail soapFaultDetail = ex.getSoapFault().getFaultDetail(); // <soapFaultDetail> node
// if there is no fault soapFaultDetail ...
if (soapFaultDetail == null) {
throw ex;
}
SoapFaultDetailElement detailElementChild = soapFaultDetail.getDetailEntries().next();
Source detailSource = detailElementChild.getSource();
Object detail = webServiceTemplate.getUnmarshaller().unmarshal(detailSource);
JAXBElement<serviceException> source = (JAXBElement<serviceException>)detail;
System.out.println("Text::"+source.getText()); //prints : Locale is invalid.
}
I don't find any other elegant way so i hope this should be the solution.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With