Apache Camel按开始和结束字符SOH和ETX拆分

ogq8wdun  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(230)

我有一个在启动时加载routes.xml的Sping Boot 应用程序
在routes.xml中,我有一个包含示例消息的MQ队列源

SOH{123}{345}{4
5
6
}ETXSOH{111}{222}{3
3
3
}ETX

其中SOH =且ETX =
当我收到此消息时,我想将此消息拆分为两部分。

{123}{345}{4
5
6
}

{111}{222}{3
3
3
}

目前我正尝试使用

<split>
  <tokenize token="(?s)(?&lt;=\u0001)(.*?)(?=\u0003)" regex="true"/>
  <to uri="jms:queue:TEST.OUT.Q" />
</split>

我已经测试了这个正则表达式使用在线正则表达式测试仪,它是匹配的。https://regex101.com/r/fU5VVj/1
但当运行代码时,我得到的是#1

SOH

2

ETXSOH

3

ETX

还尝试了令牌和endToken,但不适用于我的情况

<tokenize token="\u0001" endToken="\u0003" />

我的例子可以使用camel route xml吗?如果可以,你能告诉我正确的正则表达式或开始和结束标记吗?
谢谢

lpwwtiir

lpwwtiir1#

看起来camel正则表达式与java正则表达式不同,只是使用下面的示例代码创建了一个新进程

Pattern p = Pattern.compile("(?s)(?<=\\u0001).*?(?=\\u0003)");
    Matcher m = p.matcher(items);
    List<String> tokens = new LinkedList<>();

    while (m.find()) {
        String token = m.group();
        System.out.println("item = "+token);
        tokens.add(token);
    }

相关问题