2

jaxb を使用して SOAP 応答を非整列化しようとしています。

次のコードを使用してルート要素を見つけようとしました

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setNamespaceAware(false);
        DocumentBuilder db;
        try {
            db = dbf.newDocumentBuilder();
             Document d = db.parse(new File("response.xml"));

                Unmarshaller unmarshaller = null;
                Results results = null;
                unmarshaller = JAXBContext.newInstance(Results.class).createUnmarshaller();

                    Node getNumberResponseElt = d.getElementsByTagName("results").item(0);
                    JAXBElement<Results> rs = unmarshaller.unmarshal(new DOMSource(getNumberResponseElt),Results.class);
                    results = rs.getValue();

           }

これが私の応答例です

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<service:ServiceResponse xmlns:out="http://example.com/Person/PersonData/v1" xmlns:service="http://example.com/Person/PersonData/v1/" xmlns:xs4xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<results>
<out:result>
<out:person>
<out:personName>
<out:firstName>First</out:firstName>
<out:lastName>Last</out:lastName>
</out:personName>
<out:gender>M</out:gender>
</out:person></out:result></results></service:ServiceResponse></soapenv:Body></soapenv:Envelope>

オブジェクトを取得できresultsますが、にアクセスしようとすると、接頭辞のために null が表示resultされますresultsout:

誰かが私がこれから抜け出すのを手伝ってくれますか?

更新:誰でもこれについて私を助けることができますか?

stax xml パーサーを使用して解析しましたresultsが、その中のすべての値が null として表示されます。

4

1 に答える 1

1

問題は名前空間の場所だと思います。StAX XMLStreamReader を使用して XML を解析し、正しい要素に進み、その時点で XMLStreamReader から非整列化できます。

http://blog.bdoughan.com/2012/08/handle-middle-of-xml-document-with-jaxb.html

于 2013-07-05T07:53:45.330 に答える