2016-08-05 3 views
0

Я хочу извлечь код и текст отдельно от мыльной неисправности, указанной ниже. Код, который я использую (перечисленный ниже xml), это печать кода и текста вместе.SoapFaultException - извлечь код и текст

<env:Fault xmlns:env = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:fault = "http://schemas.xmlsoap.org/soap/envelope/"> 
    <faultcode>fault:Client</faultcode> 
    <faultstring>An error occurred. Please check the detail section.</faultstring> 
    <detail> 
     <e:serviceFault xmlns:e = "http://xml.comcast.com/types"> 
      <e:messages> 
       <e:message> 
        <e:code>ERRORCODE-82828</e:code> 
        <e:text>Error Message.</e:text> 
       </e:message> 
      </e:messages> 
     </e:serviceFault> 
    </detail> 
</env:Fault> 

Код

public void printSoapFaultClientException(SoapFaultClientException e) { 
    TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
    Transformer transformer = null; 
    transformer = transformerFactory.newTransformer(); 

    DOMResult result = new DOMResult(); 

     transformer.transform(e.getSoapFault().getSource(), result); 
     NodeList nl = ((Document)result.getNode()).getElementsByTagName("detail"); 

    System.out.println(" text content " + ((Element)nl.item(0)).getTextContent()); 

} 

ответ

1

Вот пример делать это, так как это XML ошибка, я просто использовал анализатор для разбора XML и извлечь поле от него. Также SOAPFaultClientException API, может помочь вам извлечь причину ошибки напрямую, если вы хотите (http://docs.spring.io/spring-ws/site/apidocs/org/springframework/ws/soap/client/SoapFaultClientException.html)

File fXmlFile = new File("C:\\DevelopmentTools\\3.CODE\\SOAP.txt"); 
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
Document doc = dBuilder.parse(fXmlFile); 
doc.getDocumentElement().normalize(); 

XPath xpath = XPathFactory.newInstance().newXPath(); 
String responseStatus = xpath.evaluate("//*[local-name()='code']/text()", doc); 
String responseText = xpath.evaluate("//*[local-name()='text']/text()", doc); 
System.out.println("---> " + responseStatus); 
System.out.println("---> " + responseText); 
+0

Благодаря @Ramachandran. API Spring просто возвращает код ошибки и faultstring и не возвращает внутренний код и текст. –

+0

Xpath помог много. Спасибо! –

+0

Я поймаю (SoapFaultClientException e) в блоке catch. как извлечь внутренний текст? –

Смежные вопросы