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 主体的实现。我还在 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变量中

我尝试了所有选项,但没有成功。请尽快提供这方面的帮助。

提前致谢!!

4

0 回答 0