2016-07-13 42 views
1

我想從spring-ws應用程序中的肥皂請求中提取soap身體。我的SOAP請求被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的新手

回答

2

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

非常感謝。有效 – user2332505