我想检查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
?
答案 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:我真的不明白为什么你无法解除你的要求。有了更多的细节,它会更容易帮助你,我会花费一些力气,因为它绝对是你做你需要的正确方法。