我正处于创建输出拦截器的阶段,我从SOAP消息中获取了一个OuputStream。但是如何在将SOAP信封发送到端点之前修改它呢?我想删除一些xml元素。
答案 0 :(得分:3)
一种方法是获取文档并通过XSLT转换运行它。
您可以通过调用
来获取拦截器handleMessage中的文档@Override
public void handleMessage(SoapMessage message) throws Fault{
SOAPMessage saaj = message.getContent(SOAPMessage.class);
Document doc = saaj.getSOAPPart(); // This actually returns a SOAPPart instance but it does implement the w3c Document interface
//play around with the document, doc is a reference so any changes made to that instance
//will be forwarded to the rest of the chain
}
小心但是如果你有必须在soap内容上执行的XML签名等安全性,你必须确保在应用签名之前发生拦截器,否则你将使它们失效。
要使用拦截器的时间,您可以指定它将运行的阶段。如果在同一阶段执行,CXF还应遵守您配置它们的顺序。
但不要相信我的话......请查看这些以获取更多信息
通过CXF源代码进行调试也帮助我了解了它的工作原理
----编辑----
(谢谢Daniel: - )
为此,您需要在堆栈中配置SAAJOutInterceptor。您既可以手动添加,也可以将其作为拦截器的一部分。 Here is拦截器的一个例子,几乎可以满足您的需求。
答案 1 :(得分:3)
有关拦截器阶段的描述,请参阅此链接
答案 2 :(得分:1)
我在这里发了一个答案https://stackoverflow.com/a/12948702/792313 它基于全身替代。