apache camel - How to use $header in routes -
i'm creating route using java dsl in camel.
i'd perform text substitution without creating new processor or bean.
i have this:
.setheader(my_thing, constant(my_template.replace("{id1}", simple("${header.subs_val}").gettext()))) if don't add 'constant' type mismatch errors. if don't put gettext() on simple() part, text mismatch answers. when run route, replaces {id} literal ${header.subs_val} instead of fetching value header. yet if take quotes off, compile errors; java doesn't know ${...} syntax of course.
deployment takes few minutes, experiments expensive.
so, how can simple substitution. nothing finding on web seems work.
edit - template? specifically, string (it's url)
http://this/that/{id1}/another/thing i've inherited code, unable to(...) url , apply special .tof() (??) formatting.
interesting case!
if place my_template in header use nested simple expression(camel 2.9 onwards) in example below. setting value subs_val example, suppose header has value in route.
.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()})}")) after step header my_thing has value http://this/that/22/another/thing.
1)in example skip to_string() not know what's type of header "subs_val" .
2) tried first replaceall(\"\{id1\"}\") didn't work } bug...will @ again. that's why in regex used .?
3) when debug application inside processor, exchange available can use simplebuilder evaluate simple expression in ide, without having restart app
simplebuilder.simple("${in.header.url.replaceall(\"\\{id1.?\",${in.header.subs_val.tostring()})}").evaluate(exchange, string.class); hope helped :)
Comments
Post a Comment