2017-12-28 22 views
0

私はラクダで要求/返信jmsコンシューマを取得しようとしています。 受信メッセージが受信されましたが、ラクダも応答を送信してもメッセージはマーシャリングされません。私はActiveMQのからとするすべてのメッセージをマーシャリングするインターセプタを使用していますCamel intercept/marshal jms reply

OsdrDataFormat osdrDataFormat = new OsdrDataFormat(); 

interceptFrom("activemq:*").unmarshal(osdrDataFormat); 
interceptSendToEndpoint("activemq:*").marshal(osdrDataFormat); 

エンドポイント(メッセージをマーシャリングするとき、私はのJMSTypeを埋めることができますので、私はJacksonDataFormatを拡張します。)

通常の片道交換、これは(例えば)作業

from("activemq:queue:test").bean(TestComponent.class, "test"); 
from("direct:test-input").to("activemq:queue:test"); 

しかし、私はこのルート

を使用するときにされます
from("activemq:queue:test").bean(TestComponent.class, "test"); 

メッセージをJMSReplyToメッセージとともにテストキューに送信します(activemq管理ページを使用)。私はラクダが応答メッセージを送信したが、jsonにマーシャリングされていないことがわかります。

marshalを手動で追加することはできますが、私は抽象的なRouteBuilderを作成し、デフォルトで各ルートにインターセプタを追加できるので、インターセプタを使用することをお勧めします。

from("activemq:queue:test").bean(TestComponent.class, "test").marshal(osdrDataFormat); 

これを解決する方法は誰にも分かりますか?あるいは、activemqからのすべてのメッセージがマーシャリングされていることを確認する良い方法でしょうか?

このスレッドも見つかりました:Apache Camel inOut routes, out exchange marshaling/unmarshaling with jaxb しかし、ここでの答えはマニュアルのマーシャリングを使用することです。

答えて

0

interceptSendToEndpointは、CamelがCamelエンドポイントにメッセージを送信する場合にのみ使用されます。JMSコンポーネントが内部的にJMSメッセージを一部のJMS送り先に送信した場合ではありません。それは同じではありません。

+0

(非常に)遅れて返信して申し訳ありませんが、私はマニュアルのマーシャルとアンマーシャルを使用して終了するのが最良の解決策でした、私たちは非マーシャルの前に何か他のことをしたいユースケースを発見しました。 –

関連する問題