インターセプターで Bean を呼び出し、注釈を使用していくつかのパラメーターをバインドしようとしていますが、メソッドが呼び出されると、注釈が無視され、代わりに本体が最初のパラメーターにバインドされ、2 番目のパラメーターが null のように見えます。
Blueprint DSL を使用して同じ XPath を試してみましたが、問題なく動作するので、これは問題ではないと確信しています。私の方法は次のようなものです: -
public void intercept(
@XPath(value = "//custom:myElement/text()",
namespaces = { @NamespacePrefix(prefix = "custom", uri = "http://my.website.com/custom") },
resultType = String.class) String elementValue,
@Body String body) {
LOG.info("elementValue {}", elementValue);
LOG.info("body {}", body);
}
そして、私のインターセプターはこのようなものです。
<camel:interceptSendToEndpoint uri="direct:core-service">
<camel:to uri="bean:interceptor?method=intercept" />
</camel:interceptSendToEndpoint>
インターセプタが呼び出されると、最初のログ ステートメントには完全な SOAP エンベロープが出力され、もう 1 つのログ ステートメントには null が出力されます。
この Bean アノテーションを認識させるために何かする必要がありますか? ドキュメントから、上記のように注釈を追加するだけでよいようです。うまくいかないなんて信じられない。
これはJBose Fuseで実行されているため、違いがある場合はcamel 2.10です。
アップデート
質問からインターセプターを削除して、単純なルートで実行しようとしましたが、まだ機能しません。着信文字列を XML として何らかの形で型キャストする必要がありますか、それとも @XPath が機能するためにボディ内の JAXB エンティティである必要がありますか?