java - Apache Camel Java DSL 向正文添加换行符

标签 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 的文本。

最佳答案

我找到了一个解决方案,我永远不确定什么可以从 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 的字符串。这解决了我的问题。

关于java - Apache Camel Java DSL 向正文添加换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41446884/

相关文章:

java - Eclipse Java 调试器在一个文件中始终偏离应有的位置 6 行

java.lang.NoClassDefFoundError : android. 支持.v7.app.AppCompatDelegateImplV11

java - Camel cxf客户端请求中的Http header Content-Length

java - Java DSL RouteBuilder 的配置方法内的 Exchange/body 引用

java - Apache Camel,如何将消息从 SOAP 移动到 JMS

java - Netty 客户端相对于 I/O 客户端的优势?

java - 如何在 SWT 中监听粘贴键盘快捷键

java - Springboot 关闭 Hook 无法与 Windows TaskKill 一起使用

grails - Camel 模拟端点没有收到任何消息

java - Play 2.0 框架 - 保留表名