我們使用MVEL通過在地圖對象中傳遞地圖來評估表達式。該映射包含SNMP陷阱信息,如OID及其值。例如樣本地圖包含以下鍵和值。使用數字鍵的MVEL表達式
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
我們的地圖將始終包含這樣的OID和值,我們希望使用MVEL驗證它們的值。基於此,我們需要知道
- 如果提到的表達式是一個有效的表達式,如果不是,那麼需要進行哪些更改才能使其工作。
- 我們是否需要向表達式中提及的鍵添加任何其他轉義字符或
- 這是不可能的,因爲表達式中提到的鍵不是有效的屬性/標識符。
這意味着我們需要按照屬性/標識符命名約定規則將鍵放入Map中,作爲其調用getter調用鍵的鍵。 – 2015-03-26 11:32:17
@AmitDandavate是Amit,MVEL對每個輸入都有意義(特殊字符等) – 2015-03-26 12:26:33
那麼每個特殊字符需要多少次這樣的轉換?例如如果我在地圖中包含特殊字符「 - 」(連字符)的情況下將Key作爲「陷阱數據」,那麼它還會拋出一個錯誤,指出「[錯誤:無法訪問屬性:陷阱:無法訪問屬性:陷阱]」 。也有任何文檔參考將爲每個特殊字符輸入賦予意義嗎? – 2015-03-27 04:15:19