我正在尝试从 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>
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下代码提取肥皂体:
@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());
}
Run Code Online (Sandbox Code Playgroud)
输出是:
null
[soapenv:Body: null]
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题。我是 spring-ws 的新手
小智 5
最好的解决方案是使用 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
Run Code Online (Sandbox Code Playgroud)
正确映射文件后,请使用 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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7932 次 |
| 最近记录: |