2016-09-28 50 views
0

我基本上是试图通过检查响应对象 我有一个SOAP服务的响应,我期待它在服务检查失败如下: 以下是输入流创建XML文档[来源两个输入流]

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"> 
    <S:Body> 
     <S:Fault xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/"> 
      <S:Code> 
       <S:Value>S:Receiver</S:Value> 
      </S:Code> 
      <S:Reason> 
       <S:Text xml:lang="en">org.xml.sax.SAXParseException; cvc-complex-type.2.4.b: The content of element 'ns2:MYREQ' is not complete. One of '{"urn:SOMETHINGELSE}' is expected.</S:Text> 
      </S:Reason> 
     </S:Fault> 
    </S:Body> 
</S:Envelope> 

。 当我使用下面的代码,将其转换为SOAP消息的文档:

SOAPMessage message = MessageFactory.newInstance("SOAP 1.2 Protocol").createMessage(null, response); 
     Document responseDocument = message.getSOAPBody().extractContentAsDocument(); 

肥皂enevelope修剪和我只

<S:Fault xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/"> 
       <S:Code> 
        <S:Value>S:Receiver</S:Value> 
       </S:Code> 
       <S:Reason> 
        <S:Text xml:lang="en">org.xml.sax.SAXParseException; cvc-complex-type.2.4.b: The content of element 'ns2:MYREQ' is not complete. One of '{"urn:SOMETHINGELSE}' is expected.</S:Text> 
       </S:Reason> 
      </S:Fault> 

但是,当我使用文档构建这样来做,我得到正确的输出

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder builder = factory.newDocumentBuilder(); 

       Document responseDocument = builder.parse(response); 

请让我知道为什么它,当我InputStream的转换为SOAP消息,然后向文件中,enevelope和身体不见了。

+0

嗯,这听起来好像'getSOAPBody()'and'extractContentAsDocument()'他们说的去做。如果你想看到完整的消息,那么使用'writeTo'。 –

回答

1

message.getSOAPBody().extractContentAsDocument();

在这里,你问到SOAP响应的<S:Body>标签内返回的一切。如果你想要得到的信封, SOAPPart sp = message.getSOAPPart(); SOAPEnvelope se = sp.getEnvelope();

在​​

提及而在第二个选项,而不是你使用DOM API SOAP API。这就像将任何xml字符串转换为Document一样。因此,整个SOAP消息被转换成简单的DOM文档,您可以从SOAP响应中访问每个节点。

+0

谢谢Shyam,我现在如何从Soap Envelope获取文档? – diva

+0

您已经通过第二个选项使用“DocumentBuilderFactory”获得了'Document'。这会不够吗? – Shyam

+0

第二种方法很好。我想让第一个人工作 – diva