我们使用 MVEL 通过在上下文对象中传递映射来评估表达式。该映射包含 SNMP 陷阱信息,例如 OID 及其值。例如,示例地图包含以下键和值。
Map<String,String> trapMap = new HashMap();
trapMap.put("1.3.6.1.4.1.9.9.311.1.1.2.1.3", "(7362915) 20:27:09.15");
trapMap.put("1.3.6.1.4.1.9.9.311.1.1.2.1.2", "2.2");
trapMap.put("1.3.6.1.4.1.9.9.311.1.1.2.1.19", "0");
trapMap.put("1.3.6.1.4.1.9.9.311.1.1.2.1.16", "SIMPLE TRAP --Port Down due to Admin Status down");
trapMap.put("errorStatus", "0");
trapMap.put("IPAddress", "10.127.34.219");
当我们使用 MVEL.eval() 评估表达式时,它要么失败要么返回 False。以下是使用的 MVEL 表达式及其结果。
System.out.println("----------########### = "+(MVEL.eval("1.3.6.1.4.1.9.9.311.1.1.2.1.19 == '0'", trapMap)));
//Throws error as
//Exception in thread "main" [Error: invalid number literal: 1.3.6.1.4.1.9.9.311.1.1.2.1.19]
// [Near : {... 1.3.6.1.4.1.9.9.311.1.1.2.1.19 == '0 ....}]
System.out.println("----------########### = "+(MVEL.eval("\"1.3.6.1.4.1.9.9.311.1.1.2.1.19\" == '0'", trapMap)));
//Enclosed trap OID in double quotes and compared with String value then it returns false
System.out.println("----------########### = "+(MVEL.eval("\"1.3.6.1.4.1.9.9.311.1.1.2.1.19\" == 0", trapMap)));
//Enclosed trap OID in double quotes and compared with number then it returns false
我们的 Map 将始终包含这样的 OID 和值,我们希望使用 MVEL 验证它们的值。基于此,我们需要知道
- 如果提到的表达式是有效的表达式,如果不是,那么需要进行哪些更改才能使其工作。
- 我们是否需要向表达式中提到的键添加任何额外的转义字符或
- 这是不可能的,因为表达式中提到的键不是有效的属性/标识符。