我从各种endpoint源向exchange中获取头,在某些情况下,头是在路由中定义的。只有在我的RESTendpoint的情况下,头键才会被转换为小写。我了解到,Camel中的大多数内容在引用头键时是不区分大小写的,而且我知道HTTP规范,例如,这很好用,大小写无关紧要:
.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;
尽管Camel的头在很多情况下是不区分大小写的,但并不是所有组件都支持Camel的头;在本例中,是xQuery组件。不过,在封面下,Camel确实会在头键中保留大小写,除非在使用REST DSL之类的HTTP时将其转换为小写。
例如,如果我向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入口点进入一个路由,并根据最初提供的标题有条件地在我的路由中设置一些新的标题,然后使用一个对标题键情况挑剔的骆驼组件,比如xQuery。另外,不得不使用$in.headers.myprettylongexternalvariable看起来有点难看。
我尝试过只在我的REST路由中“重置”标题,方法是做这样的事情,以使我所有的入口点的情况保持一致:
.setHeader("blueMoon", simple("${header.blueMoon}"))
虽然骆驼不会抱怨,但它不起作用。似乎一旦定义了标题,情况就不会变!有什么解决办法吗?
Camel在此地图实现中存储标头
正如您可以看到的,它的JDK树映射具有不敏感的顺序。
所以我怀疑它的xquery或其他库不能正确处理树映射的这种不敏感的排序。
您可以尝试深入了解xquery(saxon)是如何做到这一点的,并在他们的用户论坛上提问。
另一种选择是在最新的Camel 2.20中,通过新的HeadersMapFactory
(https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/spi/HeadersMapFactory.java)如果您可以使用常规的非不敏感HashMap等,或者尝试新的camel-headersmap组件,您可以将其放在类路径上,camel应该自动检测并使用它(如果是,它会记录日志),它的实现与JDK树映射不同,因此可以与xquery一起使用。
在Java中如何将snake case转换为camel case? 输入:“输入蛇的情况” 输出:"InputInSnakeCase"
我有一个带有Camel处理器的骆驼DSL路由,该处理器确定要发送文件的位置。路径保存到Exchange中的标头中,以便将其传递回路由。我想在我的路由中使用此标头值(路径),但我收到以下错误: “不允许使用${}占位符的动态表达式。请使用文件名选项设置动态表达式。” 当我使用fileName选项时,这会创建一个文件作为路径中的最后一个目录,而我希望这是一个目录,但没有像directoryName这样
问题内容: 我想将字符串的第一个字符转换为大写,并将其余字符转换为小写。我该怎么做? 例: 问题答案: 尝试以下尺寸: 基本上,它首先处理空字符串和一个字符字符串的特殊情况,否则正确处理一个两字符以上的字符串。而且,正如评论中指出的那样,功能不需要使用一个字符的特殊情况,但我仍然希望明确,特别是如果它导致更少的无用调用(例如子字符串以获取空字符串),小写字母它,然后附加它。
问题内容: 给定此目录树: 编译file.cpp与VS一起使用,在gcc中失败。 标准怎么说? 如果路径区分大小写,这为什么明智? 最佳实践是什么,将所有文件/文件夹名都小写,并在包含时做同样的事情? 谢谢。 问题答案: 区分大小写取决于操作系统。Windows不区分大小写。Linux是。 编辑: 实际上,正如MartinYork的评论所观察到的,区分大小写取决于文件系统。默认情况下,Window
我有关于在JTextField打字的问题。我的程序搜索通过几个csv文件和寻找指定的JTextField字符串。我有添加到readLine函数". toLowerCase"读取所有字符串作为小写。在写入JTextField时,是否可以将JTextField设置为自动将大写转换为小写? if(line.toLowerCase()。包含(searchedString))
问题内容: 我有一个PHP代码库,用于混合环境下处理我们的MySQL表。例如,。 我们的代码也可以在Windows上运行,并且在不了解之前,我们已经将多个数据库导入到Windows服务器上。这导致Windows MySQL将所有表名更改为小写。()。现在,我们知道如何防止这种情况发生在新数据库中。()并且,代码在Windows服务器上运行良好,因为MySQL根本不在乎Windows上表的大小写。