私はラクダのbeanから戻り値を取得し、それを私のルートで使用するのに少し問題があります。キャメル(Java)のBeanからの戻り値の取得
public void testBean (PojoName pojoInstance){
//do stuff
int i= 75; //a number I generate within the bean after I've started this method
}
は私が私の豆の内側に、私のルートで生成番号を使用したい:
はfrom(file:test/?delete=true)
.unmarshal(jaxb)
.bean(testBean, "testMethod")
.to(direct:nextRoute);
Beanは次のようになります。
私はこのようになりますルートを持っています。私が試した何
from(file:test/?delete=true)
.unmarshal(jaxb)
.bean(testBean, "testMethod")
.log(integer generated from testBean)
.to(direct:nextRoute);
:このような何か
そうでは、代わりに私のBean内のボイドを返すので、私はintに戻り値の型を変更し、整数を返しました。その後、私は自分のルートでこのような何かを期待していた:私の思考は、私は豆から値を返すと、それは交換体にその値を格納しなければならないことである
.log("${body.intFromBean}")
(少なくとも、それは私が「何ですCamelのドキュメントから取得しています)。それから私は私のルートでそれにアクセスすることができました。
問題:しかし
、私はintにtestBean戻り値の型を変更したときに、私は次のエラーを取得:。
org.apache.camel.CamelExecutionException: Execution occurred during execution on the exchange
Caused by: org.apache.camel.InvalidPayloadException: No body available of type: PojoName but has value: numberIGenerated of type java.lang.Integer
(申し訳ありませんが、私は完全なスタックトレースを持たないI
私の質問:
他のものを読んでから私は問題を理解していると思います。メッセージ本文は1つの型で、戻り型は別の型です。しかし、私が使ってみても。
.convertTo(Integer.class)
前にBeanを呼び出すが、それもうまくいかなかった。 (概念的には、それをアンマーシャリングした直後にintに変換すると、アンマーシャリングされたデータを使用することができなくなるためですが、とにかく試してみると思っていたからです)。
整数を正しく返す方法を私の理解を深めることができますか?
私は豆の製本と交換に関する文書を読みました。私はこれを行うのに十分理解していると思いました。しかし、私は何かを欠いているに違いない。
完全なスタックトレースと、 testMethodの実装など)は役に立ちます。また、testBeanが定義されている場所では完全なルートが役立ちます。また、これはiffyのように見えます:$ {body.intFromBean}はログステートメントからですが、もっと情報が必要です... –
$ {body.intFromBean}の代わりに.log( "$ {body}")を試しましたか?ラクダはメッセージ本体として結果を保存します。 –