Apache Camel:如何将setHeader值设置为null

时间:2018-05-29 11:53:43

标签: rabbitmq apache-camel

我们如何在来自处理器的apache camel exchange消息中将头值设置为null。我正在向RabbitMQ交换传递消息,并且它期望将其中一个标头值设置为null。

在发送消息之前,我已尝试过处理器中的以下方法

exchange.getOut().setHeader("headername","");

但是这会在标题中设置一个空字符串。

我也试过

exchange.getOut().setHeader("headername",null);

但在这种情况下,标题本身不可见。

如果需要更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:1)

camel-rabbitmq组件不支持null值的标头。它们在源代码中被过滤掉。

https://github.com/apache/camel/blob/fab7a58e56e128286f327aba16c09553b26cb846/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessageConverter.java#L171

需要发送空值的奇​​怪要求/用例。因此,为什么我要求你解释这个。必须有充分的理由考虑改变骆驼。

答案 1 :(得分:0)

骆驼为此实现了一个修复程序,该修复程序已反向移植到2.22.1和2.21.3版本,并将在此之后提供。对于那些有兴趣知道如何实现此目标的人,请查看Camel-12654吉拉问题。

camel-rabbitmq组件和端点现在支持URI选项allowNullHeaders,默认情况下为false。如果要发送值为null的自定义标头,请将其值设置为true。例如

from("rabbitmq://hostname:port/exchangeName?allowNullHeaders=true").....

这将配置camel-rabbitmq转换器以将标头设置为空值。现在,您可以通过处理器执行类似的操作

exchange.getOut().setHeader("headername",null);

这将指示camel-rabbitmq生产者不要跳过具有空值的标头。