我在Camel中使用Java DSL创建路由。
我想在不创建新处理器或bean的情况下执行文本替换。
我有这个:
.setHeader(MY_THING,
constant(my_template.replace("{id1}", simple("${header.subs_val}").getText())))
如果我不添加常数'我得到类型不匹配错误。如果我不将getText()放在simple()部分,我会得到文本不匹配的答案。当我运行我的路线时,它会用文字{id}
替换${header.subs_val}
,而不是从标题中获取我的值。然而,如果我取消引号,我会收到编译错误;当然,Java并不知道${...}
语法。
部署需要几分钟,因此实验费用很高。
那么,我怎样才能做一个简单的替换。我在网上找到的任何东西实际上似乎都没有用。
编辑 - 模板是什么?具体来说,是一个字符串(它是一个URL)
http://this/that/{id1}/another/thing
我已经继承了一些代码,因此我无法简单to(...)
这个网址并应用特殊的.tof()
(??)格式。
答案 0 :(得分:2)
有趣的案例!
如果将my_template放在标题中,则可以使用嵌套的简单表达式(Camel 2.9以后),如下例所示。我也为示例设置了一个subs_val值,但我认为你的标题在路径中已有一个值。
.setHeader("my_template", constant("http://this/that/{id1}/another/thing"))
.setHeader("subs_val",constant("22"))
.setHeader("MY_THING",simple("${in.header.my_template.replaceAll(\"\\{id1.?\",${in.header.subs_val.toString()})}"))
在此步骤之后,标题MY_THING的值为http://this/that/22/another/thing。
1)在这个例子中,我可以跳过to_String(),但我不知道你的标题“subs_val”的类型是什么。
2)我首先尝试使用replaceAll(\“\ {id1 \”} \“),但它不起作用}可能这是一个错误...会再看一遍。这就是为什么在我的正则表达式中我用过。?
3)当您在处理器内调试应用程序时,交换机可用,您可以使用SimpleBuilder在IDE中轻松评估简单表达式,而无需重新启动应用程序
SimpleBuilder.simple("${in.header.url.replaceAll(\"\\{id1.?\",${in.header.subs_val.toString()})}").evaluate(exchange, String.class);
希望它有所帮助:)