将修改后的xml放回邮件中?

时间:2013-08-08 14:13:51

标签: cxf interceptor

我正在使用CXF通过SOAP over JMS发送消息。

我正在尝试在POST_MARSHALL阶段编写一个CXF拦截器。 我想在生成xml时更改一些属性。

我知道我可以通过

从邮件中获取内容
message.getContent(java.io.Writer.class).

这恰好是 JMSConduit $ 1 的形式。其中 - 我认为 - 是 StringWriter (如果我调试我的代码,我可以看到 buf 字段)。

我可以使用String格式获取xml并进行更改,但问题是将其放回到消息中。

我无法将JMSConduit $ 1更改为其他内容,否则CXF不会将其发送到JMS端点。 (它必须是JMSConduit)。

我找不到将修改后的xml放回JMSConduit的方法,我可以通过它来完成

message.getExchange().getConduit();

那么,我怎样才能将修改后的xml放回到消息/ JMSConduit中?

1 个答案:

答案 0 :(得分:0)

终于找到了答案。我使用了FilterWriter。

public void handleMessage(Message message) throws Fault {
    final Writer writer = message.getContent(Writer.class);
    message.setContent(Writer.class, new OutWriter(message, writer));
}

class OutWriter extends FilterWriter {
    @Override
    public void close() throws IOException {
        // Modify String (in xml form).
        message.setContent(Writer.class, out);
    }
}