如何修改生成的SOAP请求?

kiw*_*rog 9 java cxf outputstream interceptor

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

New*_*ian 5

一种方法是获取文档并通过 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
}
Run Code Online (Sandbox Code Playgroud)

但请注意,如果您具有必须对肥皂内容执行 XML 签名之类的安全性,则必须确保拦截器在应用签名之前发生,否则将使它们无效。

要调整拦截器的时间,您可以指定它将运行的阶段。如果它们在同一阶段执行,CXF 还应该遵循您配置它们的顺序。

但不要相信我的话...检查这些以获取更多信息

通过 CXF 源代码进行调试也对我理解它的工作原理有很大帮助

- - 编辑 - -

(谢谢丹尼尔:-)

为此,您需要在堆栈中配置 SAAJOutInterceptor。您可以手动添加它,也可以简单地将其作为拦截器的一部分。 这是一个拦截器的示例,它几乎可以满足您的要求。

  • 您还需要在 SAAJOutInterceptor 中以及执行转换的拦截器中进行配置。 (2认同)