Java springupdatesoap头包含两个元素

Java springupdatesoap头包含两个元素,java,transform,webservice-client,soapheader,xslt,Java,Transform,Webservice Client,Soapheader,Xslt,我正在使用SpringWS和WebServiceTemplate调用SOAP Web服务。 目前,我在更新SOAP头时面临一个问题 下面是SOAP请求的完整结构: <SOAP:envlope> <SOAP:Header> <Security> <username>?</username> <password>?</password>

我正在使用SpringWS和WebServiceTemplate调用SOAP Web服务。 目前,我在更新SOAP头时面临一个问题

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

<SOAP:envlope>
    <SOAP:Header>
        <Security>
            <username>?</username>
            <password>?</password>
        </Security>
        <MessageData>
            <ClientIP>?</ClientIP>
        </MessageData>
    </SOAP:Header>
    <SOAP:Body>
        <Login/>
    </SOAP:Body>
</SOAP:envlope>
但当我试图用两个元素(字符串)更新标题时,我收到以下错误消息:

SOAPHeaderString

<Security>
   <username>?</username>
   <password>?</password>
</Security>
<MessageData>
   <ClientIP>?</ClientIP>
</MessageData>
原因是
Security
MessageData
元素没有根元素,因此不应该有根元素

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


谢谢

终于解决了


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

也有同样的问题,并设法解决了它,请参阅

基本上,您可以像这样将这两个元素直接封送到soap头中,而不是使用转换器:

webServiceTemplate.getMarshaller().marshal(element1,soapHeader.getResult());
webServiceTemplate.getMarshaller().marshal(element2,soapHeader.getResult());
这里提到的marshaller是“org.springframework.oxm.jaxb.Jaxb2Marshaller”。上面的元素1和2是使用生成的对象工厂类创建的jaxb元素

[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.'
webServiceTemplate.getMarshaller().marshal(element1,soapHeader.getResult());
webServiceTemplate.getMarshaller().marshal(element2,soapHeader.getResult());