こんにちは、ヘッダー内に複雑な型が埋め込まれた 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変数に追加されていることがわかります
すべてのオプションを試しましたが、うまくいきませんでした。この点に関して、できるだけ早く助けてください。
前もって感謝します!!