在Camel日志中用正则替换Body前5字符时触发空指针异常求助
解决Camel日志正则替换触发空指针异常的问题
问题根源
空指针异常主要是因为当body为null时直接调用replaceAll方法导致的,另外原正则的贪婪匹配也可能引发意外的跨标签匹配问题。
修复方案
1. 先判空再执行替换
在Camel的EL表达式中增加非空判断,避免null值触发方法调用异常:
.log("message body: ${body != null ? body.replaceAll('<Name1>(.{1,5})(.*?)</Name1>', '<Name1>*****$2</Name1>') : body}")
如果body为null,直接输出原null值(也可以替换为空字符串'');不为null时再执行替换逻辑。
2. 修正正则的贪婪匹配
原正则中的(.*)是贪婪模式,可能会匹配到多个</Name1>标签之外的内容,改成非贪婪模式(.*?),确保只匹配当前Name1标签内的剩余内容,避免跨标签错误匹配。
3. 兼容短内容场景
如果Name1标签内的内容长度小于5(比如仅3个字符),(.{1,5})会匹配全部内容,替换后*****加上空的$2,最终标签内就是*****,完全符合需求。
完整可用代码
.log("message body: ${body != null ? body.replaceAll('<Name1>(.{1,5})(.*?)</Name1>', '<Name1>*****$2</Name1>') : ''}")
内容的提问来源于stack exchange,提问作者JAK
相关产品推荐
相关产品推荐

