Spring在SOAP中获取SOAP所有本地名称

时间:2017-01-07 17:58:26

标签: spring soap spring-ws

我想检查SOAP正文是否包含一些本地名称,如pos:searchText。我必须使用MessageContext,因为我使用的是EndpointInterceptorAdapter

这是我的SOAP请求。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
  <pos:getSearchRequest> 
     <pos:searchText>some Text</pos:searchText>
     <pos:anotherField>example</pos:anotherField>
  </pos:getSearchRequest>
 </soapenv:Body>
</soapenv:Envelope>

解组并不起作用,因为我拦截了所有的请求,而且没有这个模型。

如何获取所有本地名称,例如pos:searchText

1 个答案:

答案 0 :(得分:0)

看看你是如何努力的,这将是有用的#34; unmarshall&#34;您的SOAP请求以及有关您所犯错误或困难的更多详细信息。 在最近的情况下,由于拦截器的抽象,我无法解组我的SOAP消息,我不得不使它成为一个XML字符串,然后很容易找到我需要的元素与XPath表达式。也许这也会帮助你:

private String extractSearchText(MessageContext messageContext) throws IOException, XPathExpressionException {
    ByteArrayOutputStream soapResponseOutputStream = new ByteArrayOutputStream();
    messageContext.getResponse().writeTo(soapResponseOutputStream);
    InputSource soapResponseInputSource = new InputSource(new StringReader(new String(soapResponseOutputStream.toByteArray())));
    return (String) xpath.evaluate("//pos:searchText", soapResponseInputSource, XPathConstants.STRING);
}
PS:我真的不明白为什么你无法解除你的要求。有了更多的细节,它会更容易帮助你,我会花费一些力气,因为它绝对是你做你需要的正确方法。