Java 在版本2.23.0中,如果没有CamelContext,则无法创建CamelDefaultMessage

Java 在版本2.23.0中,如果没有CamelContext,则无法创建CamelDefaultMessage,java,apache-camel,osgi,camel-cxf,Java,Apache Camel,Osgi,Camel Cxf,我的实际代码(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); Message message = new DefaultMe

我的实际代码(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);
Message message = new DefaultMessage(camelContext);
message.setHeader(HEADER_QUERY, query);
message.setHeader(HEADER_BRAND, brand);
message.setHeader(HEADER_LIST_ID, listId);
当我迁移我的平台时,我们使用的Camel版本是:2.23.0,现在我们可以看到空构造函数已被弃用。 在执行代码时,我们遇到了与官方Camel论坛中提到的相同的问题

好的方法似乎是使用构造函数和CamelContext in参数创建消息,如下所示:

Message message = new DefaultMessage();
message.setHeader(HEADER_QUERY, query);
message.setHeader(HEADER_BRAND, brand);
message.setHeader(HEADER_LIST_ID, listId);
Message message = new DefaultMessage(camelContext);
message.setHeader(HEADER_QUERY, query);
message.setHeader(HEADER_BRAND, brand);
message.setHeader(HEADER_LIST_ID, listId);
我在一个OSGI上下文中,但是代码在一个Bean中,我没有
交换
,也没有原始的
消息
。 我只是想知道如何向消息构造函数提供
CamelContext
,或者是否有其他方法在没有CamelContext的情况下创建
DefaultMessage


请注意,我不是走驼峰路线,Bean是从REST接口调用的(我怀疑有一些重构来清理这一点,但我们计划很快停用)。我正在寻找一个快速获胜的解决方案。

您可以尝试
org.apache.camel.main.main
class。它是一个单例,因此您可以使用
Main.getInstance()
获取实例,然后您可以调用
getOrCreateCamelContext()
方法来获取CamelContext。

不幸的是
Main.getInstance().getOrCreateCamelContext()
的解决方案似乎无法在我的上下文(OSGI)中工作:
Main.getInstance()
始终返回空值

但我最终找到了另一种方法:

第一步

将bundleContext注入my Bean:

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

它在OSGI环境中工作得非常好。

不幸的是,在OSGI捆绑包中,
Main.getInstance()
返回null。