Mule 3中DataWeave 1.0如何读取属性文件中的正则表达式?
解决Mule 3中DataWeave 1.0读取属性文件正则表达式的问题
问题原因分析
- 属性文件转义错误:.properties文件中反斜杠
\需转义为\\,否则会被解析为特殊转义字符,导致正则失效;同时你使用了HTML转义的<>,在属性文件中应直接写<>。 - DataWeave用法错误:
contains是检查字符串是否包含指定子串,而非正则匹配;原代码把正则表达式当作普通子串判断,逻辑完全错误。
正确操作步骤
1. 修正属性文件中的正则表达式
将属性文件内容修改为:
East.Europe=/\\b(?:Moscow|Russia|Elephant)\\b|[<>]/
- 把
\b改为\\b:适配.properties文件的转义规则,确保反斜杠被正确识别为正则的单词边界符。 - 把
<>改为<>:属性文件无需HTML转义,直接使用原字符即可。
2. 修正DataWeave 1.0代码
使用matches函数实现正则匹配,替代原有的contains,同时确保属性正确读取:
%dw 1.0 %output application/java %var v1 = payload %var eastEuropeRegex = p('East.Europe') // 读取属性文件中的正则表达式 --- (write(v1, "application/json") matches eastEuropeRegex) when (v1 != null) otherwise false
p('East.Europe'):正确读取属性值,前提是属性文件已通过Mule配置(如<context:property-placeholder>)正确加载。matches:DataWeave中专门用于判断字符串是否匹配正则表达式的函数,符合你的需求逻辑。
额外注意事项
- 确保Mule配置中已正确引入属性文件,示例配置:
<context:property-placeholder location="classpath:your-properties-file.properties"/>
- 如果正则包含
$等特殊字符,在属性文件中需转义为\$,避免被当作属性占位符解析。
内容的提问来源于stack exchange,提问作者GettingStarted With123
相关产品推荐
相关产品推荐

