regex - WSO2 EI 过滤介质中的动态正则表达式
问题描述
我已经使用过滤器调解器检查电子邮件主题是否具有特定关键字或不使用正则表达式。
<property value="Test SR AWS onboarding of AWS server" name="emailSubject" scope="default" type="STRING" />
<filter regex=".*SRAWS.*|.*SR AWS.*|.*SRSAP.*|.*SR SAP.*|.*SRFW.*|.*SR FW.*|.*SRSEC.*|.*SR SEC.*|.*INAWS.*|.*INSAP.*|.*INFW.*|.*INSEC.*"
source="get-property('emailSubject')">
<then>
<log level="custom">
<property name="==Test Case ===" value="pass" />
</log>
</then>
<else>
<log level="custom">
<property name="==Test Case ===" value="Fail" />
</log>
</else>
</filter>
就我而言,需要大量关键字(超过 60 个)。我在代码中有硬编码的关键字,而不是这个,我试图将这些关键字存储在某个地方(例如localentry)并尝试将主题与这个匹配以使代码成为通用的。
本地入口:
<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="EmailTicketing_Keyword" xmlns="http://ws.apache.org/ns/synapse">
<SR>.*SRAWS.*|.*SR AWS.*|.*SRSAP.*|.*SR SAP.*|.*SRFW.*|.*SR FW.*|.*SRSEC.*|.*SR SEC.*</SR>
</localEntry>
从 Localentry 读取:
<property expression="get-property('EmailTicketing_Keyword')" name="tokenconfig" scope="default" type="OM"/>
<property expression="$ctx:tokenconfig//*[local-name()='SR']" name="SR" scope="default" type="STRING"/>
我无法使用上述属性(SR)来匹配过滤器中介者中的主题。
有什么方法可以实现我的用例吗?
PS:将来可能会添加新关键字,为了避免在需要更改关键字时更改代码级别,我只需在 localentry 中添加新关键字而不是代码,因为关键字更改是通用的,这将正常工作,这就是我尝试这个的原因。
解决方案
您的localEntry
as XML 不起作用,因为它以.
(dot) 开头,而 wstx 解析器将引发错误。改为LocalEntry
用作Text:
<localEntry xmlns="http://ws.apache.org/ns/synapse" key="RegTicketing">
.*SRAWS.*|.*SR AWS.*|.*SRSAP.*|.*SR SAP.*|.*SRFW.*|.*SR FW.*|.*SRSEC.*|.*SR
SEC.*
</localEntry>
使用它作为正则表达式你需要使用ScriptMediator
如下:
<property name="tokenconfig" expression="get-property('RegTicketing')" scope="default" type="STRING"/>
<script language="js">
var regStr = mc.getProperty('tokenconfig').toString();
var testStr = mc.getProperty('emailSubject').toString();
var regExp = new RegExp(regStr);
mc.setProperty('testResult',regExp.test(testStr).toString());
</script>
你可以使用testResult
它FilterMediator
:
<filter xpath="$ctx:testResult='true'">
推荐阅读
- java - KeyEvent 缺少字符
- python - 如何在没有库的情况下创建计数器?
- emacs - 在 Windows 10 上以守护程序模式启动 Emacs 27.1 的初始化问题
- python - 如何计算用于股市分析的实时指标?
- python - 删除?和 | 使用替换的熊猫数据框列中的字符串中的符号
- swift - SwiftUI 2 .onChange() 中的选取器不会更改 UINavigationBar.appearance()
- omnet++ - 如何在 OMNeT++5.5 中动态更改模块的参数?
- firebase - Flutter:无法 Firebase.initializeApp() Firebase 身份验证服务
- python-3.x - Python - 创建一个 for 循环来构建具有多个数据帧的单个 csv 文件
- java - 求解给定 RSA 的 n 和 e 密钥的 d 密钥