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

Apache Camel Split by start and end characters SOH and ETX

我有一个 spring 引导应用程序,它 routes.xml 在启动时加载

在 routes.xml 上,我有一个包含示例消息的 MQ 队列源

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

其中 SOH = \u0001 和 ETX = \u0003

当我收到这条消息时,我想将消息拆分为两条

{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

也尝试了 token 和 endToken 但对我的情况不起作用

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

我的情况可以使用骆驼路线吗xml?如果是,你能指点我更正正则表达式或开始和结束标记吗?

谢谢

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