具有两个元素的Spring更新SOAP标头

我使用Spring-WS和WebServiceTemplate来调用SOAP WebService。 目前,我在更新SOAP标头时遇到问题。

下面是SOAP请求的完整结构:

   ? ?   ?       

如上所示,我需要在Header中包含2个元素。 我有以下代码来更新WebServiceTemplate的SOAP标头

 Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.transform(new StringSource(soapHeaderStr), ((SoapMessage) message).getSoapHeader().getResult()); 

但是当我尝试使用两个元素(String)更新标头时,我收到以下错误消息:

SOAPHeaderString

  ? ?   ?  

错误

 [Fatal Error] :1:197: The markup in the document following the root element must be well-formed. ERROR: 'The markup in the document following the root element must be well-formed.' 

原因是SecurityMessageData元素没有根元素,它不应该是。

请帮助我在这种情况下如何更新标题?

谢谢

最后,解决了!!

我在转换时添加了伪root,然后从SOAP Header中删除了伪根。

有同样的问题并设法解决它,请看这里

基本上你可以将这两个元素直接编组到soap标题中,而不是绑定使用Transformer:

 webServiceTemplate.getMarshaller().marshal(element1,soapHeader.getResult()); webServiceTemplate.getMarshaller().marshal(element2,soapHeader.getResult()); 

这里提到的编组器是“org.springframework.oxm.jaxb.Jaxb2Marshaller”。上面的元素1和2是使用生成的Object工厂类创建的JAXB元素。