我从各种终端来源获取头文件,并在某些情况下在路由中定义。只有在我的REST端点的情况下,标题键才会转换为小写。我得到骆驼最东西指标题密钥时,不区分大小写,我知道的HTTP规范的,例如这工作得很好,不区分大小写:为什么在使用标头的某些Camel组件区分大小写时,Camel会将来自REST DSL的标题密钥转换为小写字母?
.process((exchange) -> {
exchange.getIn().setHeader("blueMoonNight", "foo");
System.out.println(exchange.getIn().getHeader("blueMoonNight"));
System.out.println(exchange.getIn().getHeader("bluemoonnight"));
})
这一切都很好。现在,如果我下次使用XQuery的组件,这将在我的XQuery工作:
declare variable $in.headers.blueMoonNight as xs:string external;
但是,这打击了:
declare variable $in.headers.bluemoonnight as xs:string external;
虽然骆驼的头是情况下,在许多情况下使用不敏感,对不符合所有组件;在这种情况下是xQuery组件。尽管如此,Camel在标题关键字中保留大小写,除非使用诸如REST DSL之类的HTTP方式将其转换为小写字母。例如,如果我发送一个POST到REST DSL,并且在HTTP标头中使用与之前完全相同的“blueMoonNight:foo”,稍后调用相同的xQuery组件,则情况正好相反。这打击了:
declare variable $in.headers.blueMoonNight as xs:string external;
但是这工作得很好:
declare variable $in.headers.bluemoonnight as xs:string external;
这种不一致造成了我一些痛苦时,我有许多REST和JMS进入点的路线,并有条件地设置一些新的头我的路线根据最初提供的标题,然后使用一个Camel组件,它对xQuery这样的标题关键案例很挑剔。加上不得不使用$ in.headers.myprettylongexternalvariable看起来有点难看。
我已经做这样的尝试只在我的休息路线“复位”头让我的所有入口点一致的情况下:
.setHeader("blueMoon", simple("${header.blueMoon}"))
虽然骆驼不抱怨,这不是”工作。看起来一旦标题被定义,情况保持不变!任何建议的解决方法?
你使用的是什么版本的骆驼,以及你使用的是什么其他组件,例如servlet,jetty等。 –
骆驼版本2.19.2带有REST DSL over Camel-Servlet,带有Spring-Boot的嵌入式Tomcat。 –