【问题标题】:Spring-WS : How to extract Soap Message BodySpring-WS:如何提取 Soap 消息体
【发布时间】:2016-07-13 04:56:16
【问题描述】:

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

 <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的新手

【问题讨论】:

    标签: spring spring-ws


    【解决方案1】:

    最好的解决方案是使用 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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多