如何在 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)
我的路线中有一个 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 compileString
literal in Java (it is raw XML (input stream) after all)