具有依赖注入的Camel类型转换器实例化失败

时间:2013-06-07 07:53:20

标签: osgi apache-camel blueprint-osgi

我有一个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构造函数,那么转换器就会被创建 - 但显然没有它的依赖性。

类型转换器http://camel.apache.org/type-converter.html的Camel文档说明了

  鼓励静态方法减少缓存,但实例方法   很好,特别是如果你想允许可选的依赖   注入以定制转换器

是否可以通过xml定义路由并且仍然具有类型转换器依赖注入?

1 个答案:

答案 0 :(得分:4)

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

  • 静态方法
  • 有一个no-arg公共构造函数

不要使用IoC等。

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