0

SOAP XML ファイルをローカル マシンに保存して、そのファイルをロードし、SOAP 本文から XML を抽出して検証する必要があることを検証しました。

SOAP XML

<SOAP:Envelope>
    <SOAP:Body>
        <request>
             <Login>
                <Username>abc</Username>
                <Password>abc</Password>
             </Login>
        </request>
    </SOAP:Body>
</SOAP:Envelope>

上記の SOAP リクエストから <Login> XML を抽出する必要があります。FileUtils を使用してファイルを文字列に読み込みます。それを使用してファイルを読み取ると、\n\t\t などの文字も読み取られます。これは、XML 形式のファイルにある改行とタブを考慮することを意味します。

以下のコードを使用して、XML から子ノードを文字列として抽出します。

InputStream requestXMLInputStream = new ByteArrayInputStream(soapRequestXML.getBytes());
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
String requestXMLBody = "";
Document doc = null;
try {
    dBuilder = dbFactory.newDocumentBuilder();
    doc = dBuilder.parse(requestXMLInputStream);        
    NodeList requestNodeList = doc.getElementsByTagName(parentTagName);
    Node node = requestNodeList.item(0);
    DOMImplementationLS domImplLS = (DOMImplementationLS) doc.getImplementation();
    LSSerializer serializer = domImplLS.createLSSerializer();
    if(node != null && node.getFirstChild() != null)
          requestXMLBody = serializer.writeToString(node.getFirstChild());
} catch (SAXException e) {
    logger.error(e.getMessage());
} catch (IOException e) {
    logger.error(e.getMessage());
}catch (ParserConfigurationException e) {
    logger.error(e.getMessage());
}

return requestXMLBody;

これらの文字なしで XML ファイルを読み取るにはどうすればよいですか。

助けてください。

4

1 に答える 1

0

XMLドキュメントを読み取るために文字列操作を使用することは、頭痛や欲求不満の十分にテストされたレシピです。そのためには、公開されているXMLAPIのみを使用してください。

一般的なアプローチは次のとおりです。

1)SOAP XMLがファイルに格納されていると仮定して、JAXPAPIを使用してXMLをDocumentオブジェクトに解析します。

2)LoginXPathを使用して要素に移動します(JDKに含まれている標準のJava XPath APIを使用します)。

3)要素への参照を取得したらLogin、JAXPTransformerを使用して要素を文字列にシリアルLogin化します。

(標準のWebサービスAPIのいずれかを使用してSOAPパケットを受信した場合、ステップ(1)は変更されます。SOAPパケットはファイルに保存されたものとして提供されるとおっしゃいました)

于 2012-09-23T10:06:52.783 に答える