从Java中获取SOAP消息的值

时间:2013-04-17 22:03:32

标签: java parsing soap

我在调用Web服务后将SOAP消息作为字符串获取。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <PassOracleXMLDataResponse xmlns="http://tempuri.org/">
            <PassOracleXMLDataResult>
                <gesystem xmlns="">
                    <return_code>0</return_code>
                    <message>PRS User does not exists in GETS</message>
                    <invoiceid>TESTADDTLINFO2</invoiceid>
                    <datetime>Apr 17 2013  4:19PM</datetime>
                </gesystem>
            </PassOracleXMLDataResult>
        </PassOracleXMLDataResponse>
    </soap:Body>
</soap:Envelope>

我需要检索值和元素。当我尝试使用一个简单的SAXBuilder来构建一个Document并遍历它时,我在尝试使用“soap:Body”获取getChild时遇到异常

getChild("soap:Body") - returns null.

2 个答案:

答案 0 :(得分:2)

假设你正在使用JDOM:

soap:Body实际上是两部分:命名空间和元素名称。您需要使用Namespace类在检索时包含该信息。

尝试做类似的事情:

envelopeNode.getChild("Body",envelopeNode.getNamespace());

这将使它查找名为“Body”的子元素,以及与信封节点相同的命名空间。

答案 1 :(得分:0)

谢谢彼得,它有效。只有一件奇怪的事情。当我为“PassOracleXMLDataResult”获取子元素时,它还需要提供一个名称空间作为第二个参数

                Namespace nmspc = Namespace.getNamespace("http://tempuri.org/");    
            Element parseResponse = bodyEm.getChild("PassOracleXMLDataResponse", nmspc);            
            Element passResult = parseResponse.getChild("PassOracleXMLDataResult", nmspc);