我正在使用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中?
答案 0 :(得分:0)
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);
}
}