1

Apache Camelを使用して、いくつかのSOAPメッセージをAからBにルーティングしています。

特定のルートのログを追加したいのですが、問題はメッセージ本文がストリームであるということです。

私の解決策は、そのストリームを文字列に変換し、後でそれをエンドポイントBに送信することです。

これはうまくいくようですが、この方法がどれほどきれいかわかりませんか?

これが私のルートが今どのように見えるかです:

<route>
    <from uri="cxf:bean:ServiceA?dataFormat=MESSAGE" />
    <convertBodyTo type="java.lang.String"/>
    <to uri="log:my.company?level=WARN"/>
    <to ref="ServiceB" />
</route>

問題は、wireTapとストリームキャッシングを使用してストリームをコピーし、文字列に変換してログに記録し、他の手つかずのストリームをServiceBに送信する必要があるかどうかです。これを正しく行う方法が見つかりませんでした。これは私の試みです:

<route streamCache="true">
    <from uri="cxf:bean:ServiceA?dataFormat=MESSAGE" />
    <wireTap uri="log:my.company?level=WARN" /> <!-- how to convert this stream to a string? -->
    <to ref="ServiceB" />
</route>

それで、あなたは何と言いますか?盗聴または上記の解決策?

4

1 に答える 1

5

ログエンドポイントでshowStreams=trueオプションを有効にするだけです。次に、ストリームもログに記録します。その前に体を変換する必要はありません。ただし、メッセージの処理を続行するときにストリームを後で再読み取りできるようにするには、ストリームキャッシュを有効にする必要があります。

ドキュメントのログコンポーネントのオプションを参照してください:http://camel.apache.org/log

于 2012-08-22T19:54:08.147 に答える