【问题标题】:Camel type converter with dependency injection fails instantiation具有依赖注入的骆驼类型转换器无法实例化
【发布时间】:2013-06-07 07:53:20
【问题描述】:

我有一个 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 定义路由并且仍然注入类型转换器依赖项?

【问题讨论】:

    标签: osgi apache-camel blueprint-osgi


    【解决方案1】:

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

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

    并且不使用 IoC 等。

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

    【讨论】:

    • 我是否正确地假设我必须在 Java 中而不是通过蓝图 xml 来执行此操作?
    猜你喜欢
    • 2019-02-22
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2017-11-11
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多