Apache Camel Java DSL为body增加了换行符

时间:2017-01-03 15:30:05

标签: java apache-camel

所以我在Java DSL中设置了netty4套接字路由,如下所示:

@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)
;

wireTap和目的地都将数据发送到两个单独的文件。并且目标文件中的数据集合由\n(换行符)分隔......或者至少它应该是。

查看创建的文件时,永远不会添加\n

在切换到Java之前,Spring DSL中的等效思想发挥了作用:

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

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

我在Java DSL中做错了什么,因为它不允许将换行符附加到套接字数据中?

我觉得这很明显,我只是看不到。

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

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,我从来不知道从Spring到Java几乎可以翻译什么。显然,转换/简单组合存在一些问题,它在Java DSL中对我不起作用。

所以可能的解决方案(可能有更多解决方案)就是这样做:

@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字符串。这解决了我的问题。