Я использую обработчик soap. В сообщении о сбое дескриптора я не могу зафиксировать поле faultMessage и причину сбоя из xml. Как захватить эти два поля. Также есть ли способ захватить целые xml
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring xml:lang="en">Fault</faultstring>
<detail>
<ns2:FaultType xmlns:ns2="http://XXXXXXXXXXXX.com">
<ns2:detail>
<ns2:applicationException>
**<ns2:faultReason>Application error</ns2:faultReason>
<ns2:faultMessage>Amount cant be processed </ns2:faultMessage>**
</ns2:applicationException>
</ns2:detail>
</ns2:FaultType>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Я пробовал, но не получаю желаемый код
@Override
public boolean handleFault(SOAPMessageContext context) {
try {
// SOAPFault fault = context.getMessage().getSOAPBody().getFault();
//System.out.println(fault.getFaultCode());
SOAPMessage message = context.getMessage();
SOAPBody body = message.getSOAPBody();
SOAPFault fault = body.getFault();
String code = fault.getFaultCode();
String faultString = fault.getFaultString();
Detail detail = fault.getDetail();
if(detail!=null){
Iterator<SOAPElement> iter = detail.getChildElements();
//Getting first level of detail
HashMap<String, String> detailMap = new HashMap<String, String>();
while(iter.hasNext()){
SOAPElement element = iter.next();
System.out.println("element.getLocalName(), element.getValue()"+element.getLocalName()+" "+ element.getValue());
detailMap.put(element.getLocalName(), element.getValue());
}
//Logging or whatever
}
return true;
}catch (SoapFaultException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SOAPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
throw new UnsupportedOperationException("Not supported yet.");
}