如何修改生成的SOAP请求?

时间:2011-08-02 01:50:59

标签: java cxf interceptor outputstream

我正处于创建输出拦截器的阶段,我从SOAP消息中获取了一个OuputStream。但是如何在将SOAP信封发送到端点之前修改它呢?我想删除一些xml元素。

3 个答案:

答案 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 它基于全身替代。