2011-09-16 18 views
0

を処理する際に、この質問は、前のものに関連している:Apache Camel multicast, exception and Aggregation strategyのApache CXFキャメル空の応答例外

私は、以前の質問をしたときに、私は問題をmissunderstoodと思います。

私は私のルートに投げられた例外を処理しようとします。

onException(java.lang.Exception.class).handled(true).inOut("direct:thrownError"); 
from("direct:thrownError") 
    .to("log:com.sdmo.output?level="+LOG_LEVEL); 

私のルートはCXFエンドポイントによって開始されますが、例外処理ルートが実現するとき、体が空である私のWSクライアントに返さ:

.filter(not(successResponsePredicate)) 
    .to("log:com.sdmo.Error?level="+LOG_LEVEL) 
    .transform(simple("Erreur lors de l'appel copyItem")) 
    .process(new ConvertCartResponseProcessor()) 
    .throwException(new Exception("copyItemError")) 
.end() 

例外は、このコードによって処理されます。

私はデバッグモードとログでいくつかのチェックを行い、例外処理コードが応答を設定していることを確認しました。単純な型でボディ(POJOタイプ)を置き換えると、返信を送信するときにアンマーシャルエラーが発生しました。私はInOutのパターンか何かのような私の使用に問題があることを推測

INFO: Exchange[ExchangePattern:InOut, BodyType:com.access_commerce.cameleonws.cart.AddXMLResponse, Body:[email protected]] 

...

+0

.inOut(...)の代わりにonException句でsetBody(定数( "ERROR"))またはtransform(定数( "ERROR"))を呼び出してみてください。それは少なくとも働きますか? –

+0

CXFエンドポイントはPOJOモードです。この変換があった場合、マーシャリングエラーが発生します。注意:{http://www.access-commerce.com/cameleonWS/cart/}CartService#{http://}のインターセプターwww.access-commerce.com/cameleonWS/cart/}addXMLが例外をスローしました。今すぐ解凍します org.apache.cxf.interceptor.Fault:マーシャリングエラー:class java.io.ByteArrayInputStreamもスーパークラスもこれにはわかりませんコンテキスト。 – Franch

答えて

0

ドロップ:

最後の行は、返信は本体が明確に定義されているショーの前にログインhandles()メソッド呼び出しこれは例外がCXFエンドポイントに浸透するのを防ぎます。

+0

私はcxfエンドポイントに例外を伝播させたくないので、カプセル化してwsdlの応答書式でエラーを返したい – Franch

+0

これは本当にしたいことです(例外( "copyItemError")をラップする)あなたの例外ルートの終わりに、私が想定しているものにラッピングするのは、JAXB注釈付きオブジェクトです。 Camelはそのオブジェクトを返すことを前提としています。元のエンドポイントはそれをXMLに変換して返します。プロセス(新しいConvertCartResponseProcessor())。throwException()はアンチパターンのように見えます。レスポンス・プロセッサが返すBeanを与える場合は、throwException()を削除します。 –

+0

例外ルート上にプロセス(新しいConvertCartResponseProcessor())を配置しようとしましたが、動作は同じです:空の応答。スローの使用は、現在のマルチキャストを中断することです。 – Franch

関連する問題