Apache Camel Java DSL 添加换行符到消息体

3

我在Java DSL中设置了一个Netty4 Socket路由,如下所示:

@Override
public void configure() throws Exception {
    String dailyDataUri = "{{SOCKET.daily.file}}" + "&fileName=SocketData-${date:now:yyyyMMdd}.txt";
    from(socketLocation).routeId("thisRoute")
    .transform()
        .simple("${in.body}\n")
    .wireTap(dailyDataUri)
    .to(destination)
;

当窃听器和目标都将其数据发送到两个单独的文件时。并且目标文件中的数据收集由\n(换行符)分隔...或者至少应该是这样。

查看创建的文件时,\n从未添加。

在切换到Java之前,Spring DSL中的等效思想是有效的:

<transform>
    <simple>${in.body}\n</simple>
</transform>

使用该工具并打开路由期间创建的文件后,通过套接字传入的数据行将被换行符分隔。

在Java DSL中我做错了什么,导致无法将换行符附加到传入的套接字数据中?

我觉得这是一些显而易见的问题,但我却没有看到。

传入的数据只是类似于CSV的文本行。


<simple>上设置trim=false - Claus Ibsen
1
对不起,我正在将我的Spring转换为Java,那么如何在Java DSL中设置 ".simple" 组件的 "trim = false"? - Jsmith
2个回答

4
我发现一个解决方案,但我不确定Spring中的内容是否可以逐字翻译成Java。显然,在Java DSL中,transform/simple组合存在一些问题,无法为我工作。
因此,一个可能的解决方案(可能有更多解决方案)是这样做:
@Override
public void configure() throws Exception {
    String dailyDataUri = "{{SOCKET.daily.file}}" + "&fileName=SocketData-${date:now:yyyyMMdd}.txt";
    from(socketLocation).routeId("thisRoute")
    .transform(body().append("\n"))
    .wireTap(dailyDataUri)
    .to(destination)
;

与其使用简单的语言来操作正文,我只需调用正文并将\ n字符串附加到它上面。这解决了我的问题。


0
更新:Camel版本3.x及以上的文件组件提供了追加所需字符的功能。
由于您正在使用文件组件(生产者)编写文件,
appendChars (producer)
用于在编写文件后追加字符(文本)。例如,当编写和追加新文件或现有文件时,可以使用此功能添加新行或其他分隔符。要指定换行符(斜杠-n或斜杆-r)或制表符(斜杠-t)字符,则需使用额外的斜杠进行转义,例如双斜杆-n。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接