Spring-WS:如何提取 Soap 消息正文

Spring-WS : How to extract Soap Message Body

我正在尝试从 spring-ws 应用程序中的 soap 请求中提取 soap 主体。我的香皂要求是

 <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>

我尝试使用以下代码提取皂体:

@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());
 }

输出为:

 null
 [soapenv:Body: null]

请帮我解决这个问题。我是 spring-ws

的新手

最好的解决方案是使用 Jaxb unmarshal() 方法。您的 java 映射文件应该有正确的注释:- 示例:

 @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

正确映射文件后,使用 jaxb 为您解组对象:-

    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.