1

我有一个 TypeConverter 类,它设置在 blueprint.xml 文件中,并通过构造函数注入依赖项。我可以验证在将 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

不,这是不可能的。类型转换器应该是

  • 静态方法
  • 有一个无参数的公共构造函数

并且不使用 IoC 等。

如果您想要 IoC 等,则需要手动将实例注册到 Camel TypeConverterRegistry。这可能有点麻烦。

于 2013-06-07T08:21:29.510 回答