2016-12-05 110 views
0

我想读的SOAP XML请求使用下面的一段Java代码&响应的元素节点定制XSD命名空间:无法读取存在于SOAP请求和响应

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
factory.setNamespaceAware(true); 
DocumentBuilder builder = factory.newDocumentBuilder(); 
Document document = builder.parse(new ByteArrayInputStream(xml.getBytes())); 
NodeList nodeList = document.getElementsByTagName("*"); 
for (int i = 0; i < nodeList.getLength(); i++) { 
    Node node = nodeList.item(i); 
    if (node.getNodeType() == Node.ELEMENT_NODE) { 
     System.out.println("Node Name: " + node.getNodeName() + ", Node Text: " + node.getNodeValue()); 
    } 
} 

让我们说SOAP XML请求如下:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <ns1:TestRequest xmlns:ns1="urn:wu:eh:dis:test:xsd:TestRequest-v1.0.0" xmlns:ns2="urn:wu:eh:dis:test:xsd:TestRequest" xmlns:ns3="urn:wu:eh:dis:test:xsd:TestSystem" xmlns:xyz1="urn:wu:eh:dis:test:xsd:TestSystem"> 
     <ns2:TestRequest> 
      <ns3:TestSystem> 
       <ns3:UserName>test</ns3:UserName> 
       <ns3:Password>test</ns3:Password> 
      </ns3:TestSystem> 
     </ns2:TestRequest> 
     <xyz1:TestRequest> 
      <xyz1:TestSystem> 
       <xyz1:UserName>test</xyz1:UserName> 
       <xyz1:Password>test</xyz1:Password> 
      </xyz1:TestSystem> 
     </xyz1:TestRequest> 
     </ns1:TestRequest> 
    </soap:Body> 
</soap:Envelope> 

在上面的SOAP XML请求,我能够与命名空间NS2阅读TestSystem架构的元素节点,而与命名空间XYZ1的TestSystem模式是无法读取。任何人都可以帮我解决Java代码中的问题吗?

回答

1

SOAP xml的构造是错误的,这就是为什么它没有正确解析。某些结束标记与起始标记不匹配:

<xyz1:UserName>test</ns3:UserName> 
<xyz1:Password>test</ns3:Password> 
+0

抱歉包含错误的结束标记。我已经更新了示例SOAP XML请求。 – user2346047

+1

虽然我必须使用node.getTextContent()来读取节点内容,但我能够从您为ns2和xyz1提供的已更正的SOAP xml中读取数据 – amishra