Escaping <;setBody>;:如何编码\n?

Escaping <;setBody>;:如何编码\n?,escaping,apache-camel,Escaping,Apache Camel,假设您想在apache camel中的消息体中使用字符序列\n。。。 我想最简单的方法是这样的: <setBody> <simple>one line\nsecond line</simple> </setBody> 一行\n第二行 不幸的是,\n将替换为换行符。转义(\\n)在标记内似乎不起作用 你知道怎么解决这个问题吗 PS:我不能使用Java DSL,也希望避免额外的依赖项,如camel groovy如果要使用常量体,可以使用常量语

假设您想在apache camel中的消息体中使用字符序列
\n
。。。 我想最简单的方法是这样的:

<setBody>
  <simple>one line\nsecond line</simple>
</setBody>

一行\n第二行
不幸的是,
\n
将替换为换行符。转义(
\\n
)在
标记内似乎不起作用

你知道怎么解决这个问题吗


PS:我不能使用Java DSL,也希望避免额外的依赖项,如
camel groovy

如果要使用常量体,可以使用
常量
语言,不需要转义\n:

<setBody>
  <constant>one line\nsecond line</constant>
</setBody>

一行\n第二行

我可能错了,但我认为今天(v2.16.2)不可能用简单的语言引用反斜杠来做你想做的事情。如果我查看
org.apache.camel.language.simple.SimpleTokenizer
的源代码,
\
不会作为特殊字符处理。可能有一些解决方法,但使用此功能创建问题//发送PR应该很容易。

我查看了语言的camel源代码。有受保护的
allowEscape=true
,但没有设置它的接口。当然,您可以继承它,并创建自己的
Simple
语言,覆盖此字段


从您可以看到,无法使用当前的实现构造
\n
字符串。

我找到了一个解决方案-velocity模板适合我的需要。

我想我可以将常量和简单混合,不是吗?我会尝试一些类似于
foo\nbar
…不,你不能,但你可以创建自己的制作人//语言来做你想做的事情,是啊,但这不是使用camel:-(thanx)的目标。谢谢你的帮助-我找到了一个解决方案(似乎是我的答案)