gpt4 book ai didi

java - 带数字键的 MVEL 表达式

转载 作者:行者123 更新时间:2023-11-30 08:18:54 28 4
gpt4 key购买 nike

我们使用 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 验证它们的值。基于此,我们需要知道

  1. 如果提到的表达式是有效的表达式,如果不是,则需要进行哪些更改才能使其正常工作。
  2. 我们是否需要向表达式 OR 中提到的键添加任何其他转义字符
  3. 这是不可能的,因为表达式中提到的键不是有效的属性/标识符。

最佳答案

DOT(.) 会在上面的表达式中产生问题。 MVEL 在每个 . property 之后内部调用 getter

我们可以将 . 替换为 _ 运算符。还需要在开头添加_

public static void main(String args[]) throws Exception {
String s = "1.3.6.1.4.1.9.9.311.1.1.2.1.19 == 0";

Map<String, String> trapMap = new HashMap();
trapMap.put(convertDot("1.3.6.1.4.1.9.9.311.1.1.2.1.3"), "(7362915) 20:27:09.15");
trapMap.put(convertDot("1.3.6.1.4.1.9.9.311.1.1.2.1.2"), "2.2");
trapMap.put(convertDot("1.3.6.1.4.1.9.9.311.1.1.2.1.19"), "0");
trapMap.put(convertDot("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");
System.out.println(MVEL.eval(convertDot(s), trapMap));

}

public static String convertDot(String input) {
input = "_" + input.replaceAll("\\.", "_");
return input;
}

输出

true

关于java - 带数字键的 MVEL 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29254434/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com