2016-04-06 1 views
1

私は過去2日間から解決しようとしている私のapacheのラクダコードでこの問題を抱えていますが、解決できませんでした。Camelのカスタムレスポンスを返さないOnException

私は2つのルートを持っています。最初のルートは以下の通りです:

public class XXXRoute1 extends RouteBuilder { 
    public void configure() { 
     String endpointUri = "cxf:/XXX; 
     String logEndpoint = "log:" + XXX() + "?level=DEBUG"; 
     from(endpointUri) 
       .to(logEndpoint).to(ROUTE2.ENDPOINT_URI) 
       .to(logEndpoint); 
    } 

第2の経路:、私の場合は、

public class Route2 extends RouteBuilder { 
public void configure() throws Exception{ 
     String integrationEndpoint = "xxx.integration"; 
onException(RuntimeException.class).handled(true).onWhen(exceptionMessage().contains("Invalid")).bean(translator, "translateSomeError(${property.XXX})").end(); 

from(ENDPOINT_URI) 
. 
. 
. so on 

今、私はonExceptionを経由移入していたオブジェクトを(第2の経路では、私はonExceptionを通じ、いくつかの例外をキャッチしています)

public SomeObjectResponse translateSomeError(Object someObject) throws Exception{ 


     SomeObjectResponse someObjectResponse = new SomeObjectResponse(); 
someObjectResponse.setError("someError"); 

     return someObjectResponse ; 
} 

しかし、SOAP UIで、私は空のSOAPエンベロープ

を取得していますテストしながら、

私はapache camelでcxfコンポーネントを使用しています。

+0

CXFは何を返すと思いますか? SOAPのフォールト?あるいは、あなたの 'SomeObjectResponse'インスタンスが本体の中にマーシャリングされていますか? – Ralf

+0

こんにちは@ラルフ、someobjectResponseを返したい。 –

+0

そして 'SomeObjectResponse'はJAXBでマーシャリングできますか?スキーマからインターフェイスモデルクラスを生成していますか? – Ralf

答えて

0

経路を完全に投稿できますか?どこにonExceptionがありますか?

また、カスタムクラスを使用する前に、これを試すことができますか? onExceptionで設定されたものがCXFエンドポイントに戻されるようにしたいだけです。

onException(RuntimeException.class).handBody()。simple( ""予期しない例外);

+0

こんにちはGnanagurus、私はsetBodyを試みたが、あまりにも空白の応答を与えた。また、私はroutebuilderのconfigureメソッドの中の最初の行としてOnexceptionを使用しています。 –

+0

2つのことをお勧めします。1. doTry 2を使用します。これはばかげて聞こえますが、ルート内のすべてのログエンドポイントを削除して試してみてください。 – gnanagurus

0

onException()ブロックが2番目のルートにあるように見え、結果的に最初のルートの範囲にはありません。

onException()ブロックをグローバルにするか、CXFルートに追加してスコープに入れます。

+0

こんにちは忍者ですが、私はすでに共通の親クラスMyRouteBuilderを作成するルートの両方を拡張することでスコープをグローバルにしようとしましたが、どちらも助けませんでした。スコープをグローバルにする他の方法がある場合は、 –

+0

共通の親クラスは、ブロックをグローバルにブロックしません。その2つのインスタンスを作成します(各サブクラスのルートごとに1つずつ)。 1つのRouteBuilderでonException()ブロックと経路を定義して、動作するものを得るようにしてください。 XMLですべてを定義すると、onException()グローバルを簡単に作成できます... –

関連する問題