Reputation: 649
I am trying to extract soap body from a soap request in a spring-ws application. My soap request is
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org /soap/envelope/" xmlns:sch="http://www.manager.cts.com/schema">
<soapenv:Header/>
<soapenv:Body>
<sch:addManagerRequest>
<sch:name>shivani</sch:name>
<sch:salary>1231231</sch:salary>
<sch:developer>
<sch:firstName>asd</sch:firstName>
<sch:lastName>asdasd</sch:lastName>
<sch:salary>123123</sch:salary>
</sch:developer>
</sch:addManagerRequest>
</soapenv:Body>
</soapenv:Envelope>
I tried to extract soap body using the following code :
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception {
SoapMessage message = (SoapMessage) messageContext.getRequest();
SoapBody soapBody = message.getSoapBody();
Source bodySource = soapBody.getSource();
DOMSource bodyDomSource = (DOMSource) bodySource;
Node bodyNode = bodyDomSource.getNode();
System.out.println(bodyNode.getNodeValue());
System.out.println(bodyNode.getChildNodes());
}
Output is :
null
[soapenv:Body: null]
Please help me solve this problem. I am new to spring-ws
Upvotes: 2
Views: 13532
Reputation: 773
The best solution is to use Jaxb unmarshal() method. Your java mapping files files should have proper annotations :- Example :
@XmlRootElement(name = "name_of_request")
public class Request {
@XmlElement(required = true) // add this annotation for each field value
protected String test;
//other fields + getter and setter
Once you have mapped files correctly use jaxb to unmarshal object for you :-
SoapMessage message = (SoapMessage) messageContext.getRequest();
SoapBody soapBody = message.getSoapBody();
Source bodySource = soapBody.getPayloadSource();
DOMSource bodyDomSource = (DOMSource) bodySource;
JAXBContext context = JAXBContext.newInstance(Request.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Request request = (Request) unmarshaller.unmarshal(bodyDomSource);
// populate request object.
Upvotes: 5