1

こんにちは、ヘッダー内に複雑な型が埋め込まれた Spring を使用して SAOP Web サービスを作成しています。

 <soapenv:Header>
      <ser:Header>
           <ser:from>xyz</ser:from>
           <ser:to>abc</ser:to>
      </ser:Header>
 </soapenv:Header>
 <soapenv:Body>
     <abc>test</abc>
 </soapenv:Body>

エンドポイントで、SOAP ボディを生成するための実装を作成しました。また、必要な形式で SOAP ヘッダーを生成するために、Spring に Response インターセプターを実装しました。

StringBuffer headerXml = new StringBuffer();
headerXml.append("<ser:Header xmlns:mos=\"http://test.services.com\">")
.append("<ser:from>xyz</ser:from>");
.append("<ser:to>abc</ser:to>");
.append("</ser:Header>");
Source xmlInput = new StreamSource(new StringReader(headerXml.toString()));
Result xmlOutput = soapHeader.getResult();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
try{
    Transformer transformer = transformerFactory.newTransformer();
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    transformer.setOutputProperty(OutputKeys.INDENT, "yes");
    transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", String.valueOf(4));
    transformer.transform(xmlInput, xmlOutput);     
}catch(IllegalArgumentException ie){
    ie.printStackTrace();
}catch(TransformerException te){
    te.printStackTrace();
}

ここでは、SoapHeader から Result オブジェクトを取得し、トランスフォーマーを使用して xml に解析された文字列で更新しようとしています。

transformer.transform(xmlInput, xmlOutput);

しかし、ここでは、次のように出力ヘッダーに最初の行のみを取得しています

<soapenv:Header>
    <ser:Header xmlns:ser="http://test.services.com"/>
</soapenv:Header>

完全なヘッダーが得られません。deebug モードでは、文字列ヘッダー全体がxmlInput変数に追加されていることがわかります

すべてのオプションを試しましたが、うまくいきませんでした。この点に関して、できるだけ早く助けてください。

前もって感謝します!!

4

0 に答える 0