在Camel日志中用正则表达式替换Body

fykwrbwg  于 2023-04-20  发布在  Apache
关注(0)|答案(1)|浏览(159)

我想在Camel日志中用 * 替换某些字符串,为此,我使用以下代码与正则表达式,它工作正常:

.log("message body: ${body.replaceAll('<Name1>(?:.+?)</Name1>', '<Name1>*****</Name1>')}")

但是当我只想替换前5个字符时,我使用以下代码:

.log("message body: ${body.replaceAll('<Name1>(.{1,5})(.*)</Name1>', '<Name1>*****$2</Name1>')}")

但它给了我以下错误与空指针异常:

任何帮助将不胜感激,提前感谢..

slwdgvem

slwdgvem1#

根据文档,您必须使用\}转义}。由于我们使用的是字符串,因此还需要转义\字符,结果为\\}

示例:

.log("message body: ${body.replaceAll('<Name1>(.{1,5\\})(.*)</Name1>', '<Name1>*****$2</Name1>')}")`

另一种方法是使用exchange property和body().regexReplaceAll

示例:

from("direct:regexReplaceExample")
    .routeId("regexReplaceExample")
    .setBody(constant("<Name1>John Doe</Name1>"))
    .setProperty("replaced", body()
        .regexReplaceAll("<Name1>(.{1,5})(.*)</Name1>", "<Name1>*****$2</Name1>"))
    // prints <Name1>*****Doe</Name1>
    .log("${exchangeProperty.replaced}")
;

相关问题