【问题标题】:Camel DefaultMessage cannot be created without CamelContext in version 2.23.0在 2.23.0 版本中,如果没有 CamelContext,则无法创建 Camel DefaultMessage
【发布时间】:2020-03-28 01:39:45
【问题描述】:

我的实际代码(Camel 2.10.x)创建一个新的 Camel 消息来包装一些数据(http 查询),如下所示:

Message message = new DefaultMessage();
message.setHeader(HEADER_QUERY, query);
message.setHeader(HEADER_BRAND, brand);
message.setHeader(HEADER_LIST_ID, listId);

当我迁移我的平台时,我们使用的 Camel 版本是:2.23.0,我们现在可以看到空的构造函数已被弃用。 在执行代码时,我们遇到了与骆驼官方论坛this post 中提到的相同的问题。

好方法似乎是通过使用带有 CamelContext 参数的构造函数来创建消息,如下所示:

Message message = new DefaultMessage(camelContext);
message.setHeader(HEADER_QUERY, query);
message.setHeader(HEADER_BRAND, brand);
message.setHeader(HEADER_LIST_ID, listId);

我在 OSGI 上下文中,但代码在我没有 Exchange 和原始 Message 可用的 Bean 中。 我只是想知道如何将 CamelContext 提供给 Message 构造函数,或者是否有另一种方法可以在没有 CamelContext 的情况下创建 DefaultMessage

请注意,我不在 Camel Route 中,Bean 是从 REST 接口调用的(我怀疑有一些重构来清理它,但我们计划很快停用它)。我正在寻找一个速赢的解决方案。

【问题讨论】:

    标签: java apache-camel osgi camel-cxf


    【解决方案1】:

    你可以试试org.apache.camel.main.Main类。它是一个单例,所以你可以通过Main.getInstance()获取实例,然后你可以调用getOrCreateCamelContext()方法获取CamelContext。

    【讨论】:

    • 不幸的是,在 OSGI 包中,Main.getInstance() 返回 null。
    【解决方案2】:

    不幸的是,Main.getInstance().getOrCreateCamelContext() 的解决方案似乎不适用于我的上下文 (OSGI):Main.getInstance() 始终返回 null。

    但我终于找到了另一种让它工作的方法:

    第一步

    将 bundleContext 注入我的 Bean:

    <bean id="myCustomMessageFactory" class="org.mycompany.module.factory.CustomMessageFactory">
        <property name="bundleContext" ref="blueprintBundleContext" />
    </bean>
    

    blueprintBundleContext 是自动设置的,不需要声明。

    第二步

    来自 Bean(Java 代码):

    ServiceReference sr = bundleContext.getServiceReference(CamelContext.class);
    CamelContext camelContext = (CamelContext) bundleContext.getService(sr);
    // and then I can inject the camelContext into the message constructor
    Message message = new DefaultMessage(camelContext);
    

    它在 OSGI 环境中完美运行。

    【讨论】:

      猜你喜欢
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多