1

コンストラクターを介して注入された依存関係を持つ blueprint.xml ファイルに設定されている TypeConverter クラスがあります。OSGI バンドルを FuseESB にデプロイするときに、クラスが作成されたことを確認できます。

convertBodyToキャメルコンテキストで要素を使用して型コンバーターを適用します

<convertBodyTo type="com.example.RegisterRequest" />

しかし、これはコンバーターの構築時にインスタンス化の例外で失敗します

Caused by: java.lang.InstantiationException: com.example.RegisterRequestConverter
    at java.lang.Class.newInstance0(Class.java:359)[:1.7.0_21]
    at java.lang.Class.newInstance(Class.java:327)[:1.7.0_21]
    at org.apache.camel.util.ObjectHelper.newInstance(ObjectHelper.java:1166) 

noarg コンストラクターを追加すると、コンバーターが作成されますが、明らかに依存関係はありません。

型コンバーターに関する Camel のドキュメントhttp://camel.apache.org/type-converter.htmlには、次のように記載されています。

静的メソッドはキャッシングを減らすために推奨されますが、特にオプションの依存性注入を許可してコンバーターをカスタマイズする場合は、インスタンス メソッドで問題ありません。

xml を介してルートを定義し、タイプ コンバーターの依存関係を注入することは可能ですか?

4

1 に答える 1

4

いいえ、これは不可能です。型コンバーターは、

  • 静的メソッド
  • 引数のない public コンストラクターを持つ

IoCなどを使用しないでください。

IoC などが必要な場合は、インスタンスを Camel TypeConverterRegistry に手動で登録する必要があります。これは少し面倒かもしれません。

于 2013-06-07T08:21:29.510 に答える