【janino】CompileException Closing single quote missing

在這裏插入圖片描述

1.背景

寫了一個IExpressionEvaluator表達式求值,結果報錯

@Test
    public void ddTest1() throws Exception {

        String s = "( e1_deviceCat == "/Application" " + "|| e1_deviceCat == "/IDS/Network" "
                + "|| e1_deviceCat == "/Firewall" ) " + "&& e1_catBehavior == "/Authentication/Add" "
                + "&& e1_severity >= 4 " + "&& e1_catTechnique == "/TrafficAnomaly/NetWorkLayer" "
                + "&& e1_catObject == "/Host/Application/Service" " + "&& e1_destAddress != nil "
                + "&& timeHourRange(e1_startTime,0,13)";



        // Create "ExpressionEvaluator" object.
        IExpressionEvaluator ee = CompilerFactoryFactory.getDefaultCompilerFactory().newExpressionEvaluator();
        ee.setExpressionType(boolean.class);
        ee.setParameters(
                new String[]{"e1_deviceCat", "e1_catBehavior", "e1_severity",
                        "e1_catTechnique", "e1_catObject", "e1_destAddress", "e1_startTime"},
                new Class[]{String.class, String.class, int.class, String.class, String.class,
                        String.class, String.class}
                );
        ee.cook(java.lang.String.valueOf(s));

        int count = 10000*1000;
        long start = System.currentTimeMillis();
        for (int i=0;i<count;i++){
            Object[] arguments = {"/Application", "/Authentication/Add",Integer.valueOf(i),"/TrafficAnomaly/NetWorkLayer",
                    "/Host/Application/Service","1.1.1."+i,"2016-03-02 12:57:52"};
            Object res = ee.evaluate(arguments);
            System.out.println(res);
        }
        long end = System.currentTimeMillis();
        long interval = (end - start)/1000;
        long avg = count/interval;

        System.out.println("總耗時秒:"+interval);
        System.out.println("每秒處理條數:"+avg);

    }


原因是你的表達式有問題,缺少括號

  @Test
    public void ddTest11() throws Exception {

        String s = " e1_deviceCat.equals(\"aa\") ";

        // Create "ExpressionEvaluator" object.
        IExpressionEvaluator ee = CompilerFactoryFactory.getDefaultCompilerFactory().newExpressionEvaluator();
        ee.setExpressionType(boolean.class);
        ee.setParameters(
                new String[]{"e1_deviceCat"},
                new Class[]{String.class}
        );
        ee.cook(s);

        Object[] arguments = {"/Application", "/Authentication/Add", Integer.valueOf("5"),
                "/TrafficAnomaly/NetWorkLayer",
                "/Host/Application/Service", "1.1.1.1", "2016-03-02 12:57:52"};
        Object res = ee.evaluate(arguments);
        System.out.println(res);

    }

這樣就是對的了。
或者 是因爲janino不支持 單引號

 String s = " e1_deviceCat.equals(’aa‘) ";

單引號 要換成雙引號纔可以。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章