0

インターセプターで 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 エンティティである必要がありますか?

4

1 に答える 1

1

OSGi ブループリント AFAIR を使用している場合、bean パラメーターの @XPath が機能しないというバグが Camel にありました。

これは最近リリースされた Camel で修正されており、カスタマー ポータルで利用可能な JBoss Fuse のパッチでも修正されています。

回避策として、いつでも自分で Bean の xpath を実行できます。

于 2014-01-02T16:03:16.233 に答える