如何在 Apache 的 Camel Spring DSL (XML) 路由中以简单语言在 Java 方法调用中转义正则表达式?

How to escape regex in Java methods call in simple language in Apache's Camel Spring DSL (XML) route?

我的路线中有一个 setHeader 标记:

<setHeader headerName="timestampPart3"><simple>${header.timestampPart2.split("\.")[0]}</simple></setHeader>
<log message="After: ${body} ${headers}"/>

我预计,它将在 timestampPart2 header 中拆分字符串并获取第一个元素。

其实就是忽略了拆分:

timestampPart2=114128.0, timestampPart3=114128.0

那么我应该如何在 Spring DSL 中实现正则表达式转义?如果由于某种原因这是不可能的,如何解决?

要设置 Exchange 消息 header,您需要使用 name 字段而不是 headerName 字段:

<setHeader name="timestampPart3">
    <simple>some-simple-expression</simple>
</setHeader>

此外,您需要为字符串 #split 方法提供原始 regex 表达式,OGNL - Camel 解析层会自动为您清理(如果需要):

<setHeader name="timestampPart3">
    <simple>${header.timestampPart2.split("\.")[0]}</simple>
</setHeader>

Note the single back-slack character escaping the . special character. In short, you should provide a regular expression without escaping control sequences as you would do when inputing the same regular expression through a compile String literal in Java (it is raw XML (input stream) after all)