简体   繁体   中英

Spring Update SOAP Header with Two Elements

I am using Spring-WS and WebServiceTemplate to call SOAP WebService. Currently, i am facing issue while updating SOAP header.

Below is complete structure of SOAP request:

<SOAP:envlope>
    <SOAP:Header>
        <Security>
            <username>?</username>
            <password>?</password>
        </Security>
        <MessageData>
            <ClientIP>?</ClientIP>
        </MessageData>
    </SOAP:Header>
    <SOAP:Body>
        <Login/>
    </SOAP:Body>
</SOAP:envlope>

As shown above, i need to include 2 elements in Header. I have below code to update the Header of SOAP for WebServiceTemplate

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

But i got below error message when i tried to update header with two elements (String):

SOAPHeaderString

<Security>
   <username>?</username>
   <password>?</password>
</Security>
<MessageData>
   <ClientIP>?</ClientIP>
</MessageData>

Error

[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.'

The reason is that there is no root element for Security and MessageData elements and it shouldn't be.

Please help how can i update header in such case?

Thanks

Finally, resolved it !!

I added dummy root while transformation and then removed that dummy root from SOAP Header.

Had the same problem and managed to solve it, see here

Basically You can marshal the two elements directly into the soap header like this instead of tying to use a Transformer :

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

The marshaller mentioned here is a "org.springframework.oxm.jaxb.Jaxb2Marshaller" The element 1 and 2 above are the JAXB elements created using the generated Object factory class.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM