0

CXF を使用して SOAP over JMS でメッセージを送信しています。

POST_MARSHALL フェーズで CXF インターセプターを作成しようとしています。xml の生成時にいくつかの属性を変更したいと考えています。

私はメッセージからコンテンツを取得できることを知っています

message.getContent(java.io.Writer.class).

これはたまたまJMSConduit$1の形式になっています。これは - 私が思うに - StringWriter です(コードをデバッグするとbufフィールドが表示されます)。

xml を文字列形式で取得して変更を加えることができますが、問題はそれをメッセージに戻すことです。

JMSConduit$1 を別のものに変更することはできません。そうしないと、CXF はそれを JMS エンドポイントに送信しません。(JMSConduit である必要があります)。

変更された xml を JMSConduit に戻す方法が見つかりません。

message.getExchange().getConduit();

では、変更した xml を message/JMSConduit に戻すにはどうすればよいでしょうか?

4

1 に答える 1

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);
    }
}
于 2014-01-28T10:04:09.453 に答える