嗨,我正在使用 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 主体的实现。我还在 Spring 中实现了一个响应拦截器,以生成所需格式的 SOAP Header
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>
我没有得到完整的标题。虽然在调试模式下我可以看到整个字符串标题已添加到xmlInput变量中
我尝试了所有选项,但没有成功。请尽快提供这方面的帮助。
提前致谢!!