3

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 を使用してドキュメントを構築し、それをトラバースしようとしたときに、「soap: Body」で getChild を試行した後に例外が発生しました。

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

2 に答える 2

2

JDOM を使用していると仮定します。

soap:Body は、実際には名前空間と要素名の 2 つの部分です。Namespace クラスを使用して、情報を取得するときにその情報を含めることができます。

次のようなことを試してください:

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

これにより、"Body" という名前の子要素と、エンベロープ ノードと同じ名前空間が検索されます。

于 2013-04-17T22:25:42.150 に答える
0

ありがとうピーター、うまくいきました。1つだけ奇妙なことがあります。「PassOracleXMLDataResult」の子要素を取得していたとき、2 番目のパラメーターとして名前空間を提供する必要もありました。

                Namespace nmspc = Namespace.getNamespace("http://tempuri.org/");    
            Element parseResponse = bodyEm.getChild("PassOracleXMLDataResponse", nmspc);            
            Element passResult = parseResponse.getChild("PassOracleXMLDataResult", nmspc);   
于 2013-04-18T15:19:26.070 に答える