Dav*_*ave 5 java soap web-services spring-ws
我正在尝试为Web服务编写一个拦截器,它将在发送到端点之前修改Soap消息的内容.如果客户端发送了一个消息,其中某个元素的值为1,我希望能够将该元素更改为2,这样,当消息到达端点时,它看起来好像客户端提交了2而不是我不确定这是一项困扰我的艰巨任务,还是一项我正在努力实现的艰巨任务.
我已经介入了一些Spring拦截器; 但是验证和日志记录拦截器并不是每个都会改变传输中的消息.Wss4jSecurityInterceptor确实为MessageContext添加了一些属性; 但我无法利用它正在做的任何事情.我有一个拦截器的外壳; 但没有任何东西可以做任何有价值的事情.
public boolean handleRequest(MessageContext messageContext, Object endpoint)
throws Exception {
SaajSoapMessage saajSoapMessage = (SaajSoapMessage) messageContext
.getRequest();
SOAPMessage soapMessage = saajSoapMessage.getSaajMessage();
SOAPBody soapBody = soapMessage.getSOAPBody();
return true;
}
Run Code Online (Sandbox Code Playgroud)
我希望其他人可能已经解决了这个特殊问题.任何见解将不胜感激.谢谢.
修改有效负载有点棘手.我发现使这项工作的唯一方法是使用getPayloadSource()
和getPayloadResult()
方法SoapBody
,它们公开了javax.xml.transform
友好的对象来操纵数据.
这是令人讨厌的重量级,但你可以这样做:
Transformer identityTransform = TransformerFactory.newInstance().newTransformer();
DOMResult domResult = new DOMResult();
identityTransform.transform(soapBody.getPayloadSource(), domResult);
Node bodyContent = domResult.getNode(); // modify this
identityTransform.transform(new DOMSource(bodyContent), soapBody.getPayloadResult());
Run Code Online (Sandbox Code Playgroud)
我很想看到更好的方法.
归档时间: |
|
查看次数: |
9989 次 |
最近记录: |