Apache camel 自定义骆驼头未存储在JMS消息属性中

Apache camel 自定义骆驼头未存储在JMS消息属性中,apache-camel,camel-jms,Apache Camel,Camel Jms,我正在使用Camel,作为一个简单的测试用例,我想向传入消息添加一个头并将其存储在JMS队列(activemq)中。这是使用REST dsl的代码: rest("/query-set") .id("queryset-route") .get("{id}") .route() .process((exchange) -> { exchange.getIn().setHeader("myHeader", constant(UU

我正在使用Camel,作为一个简单的测试用例,我想向传入消息添加一个头并将其存储在JMS队列(activemq)中。这是使用REST dsl的代码:

rest("/query-set")
  .id("queryset-route")
  .get("{id}")
      .route()
          .process((exchange) -> {
              exchange.getIn().setHeader("myHeader", constant(UUID.randomUUID()));
          })
          .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(200))
      .endParent()
      .marshal().json(JsonLibrary.Jackson)
      .to("jms:queue:querysetRequests?exchangePattern=InOnly");
现在,当我使用HTTPie(HTTPie.org)进行GET时:

并检查队列中的消息,我注意到以下内容:

  • {id}是从URL中提取的,并作为JMS属性呈现
  • http查询参数(key=value)作为JMS属性提供
  • 自定义http头(Foo:bar)作为JMS属性存在
  • 基本身份验证头(admin:admin)作为JMS属性存在
但是,我的自定义“myHeader”以随机UUID作为值,不作为JMS属性出现在中


我做错了什么?

您正在使用
处理器设置标头,因此您应该按原样设置标头值。你不应该使用常量,例如

exchange.getIn().setHeader("myHeader", UUID.randomUUID());
因为它只是普通的Java代码


请注意,JMS规范禁止JMS属性中的某些类型(即骆驼头)。以下是一些详细信息:

如果这不起作用,请尝试使用
.toString()将值强制为字符串。
exchange.getIn().setHeader("myHeader", UUID.randomUUID());