问题
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.
回答1:
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.
来源:https://stackoverflow.com/questions/43329256/how-to-parse-soapfaultclientexception-in-spring-ws