2012-06-15 33 views
2

我想從JAVA6中的JavaScript引擎庫調用斯坦福JavaScript庫加密函數。 隨着使用的Java6我收到以下錯誤的JavaScript引擎庫下面的代碼:從JAVA6的JavaScript引擎庫調用斯坦福JavaScript庫加密函數問題

javax.script.ScriptException: sun.org.mozilla.javascript.internal.JavaScriptException: [object Object] (<Unknown source>#19) in <Unknown source> at line number 19 
at com.sun.script.javascript.RhinoScriptEngine.invoke(Unknown Source) 
at com.sun.script.javascript.RhinoScriptEngine.invokeFunction(Unknown Source) 
at Test.main(Test.java:149) 

任何幫助將非常感激。

public static void main(String[] args){ 
try { 
    ScriptEngineManager mgr = new ScriptEngineManager(); 
    List<ScriptEngineFactory> factories = mgr.getEngineFactories(); 
    System.out.println("Available script engines:"); 
    for (int i = 0; i < factories.size(); i++) { 
     ScriptEngineFactory factory = factories.get(i); 
     String engine = factory.getEngineName(); 
     String language = factory.getLanguageName(); 
     System.out.println("-------------------------------------------"); 
     System.out.println("Language: " + language); 
     System.out.println("Engine: " + engine); 
     System.out.println("-------------------------------------------"); 
    } 
    ScriptEngineManager manager = new ScriptEngineManager(); 
    ScriptEngine engine = manager.getEngineByName("ECMAScript"); 
    File script_file = new File("web/js/sjcl.js"); 
    Reader reader = new FileReader(script_file); 
    engine.eval(reader); 
    String script = "function decode(encoded_value){" 
      + "var decoded_value = sjcl.decrypt('asdf',encoded_value);" 
      + "return decoded_value;}" 
      + "function encode(plain_text){" 
      + "var encoded_value = sjcl.encrypt('asdf', plain_text);" 
      + "return encoded_value;}"; 
    engine.eval(script); 
    Invocable invocableEngine = (Invocable) engine; 
    String plain_text = "admin"; 
    String cypher_text = (String) invocableEngine.invokeFunction("encode", plain_text); 
    String plain_text_return = (String)invocableEngine.invokeFunction("decode", cypher_text); 
    System.out.print("plain_text="+plain_text+"\ncypher_text=" +cypher_text + "\nplain_text_return=" + plain_text_return+"\n"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

}

回答

0

爲了解決這個問題,我不得不改變sjcl.js改變「拋出新的」語句。

一個例子:

throw new sjcl.exception.invalid("required parameter overridden"); 

變成了:

sjcl.exception.invalid.message = ("required parameter overridden"); 
throw ("required parameter overridden"); 

我沒有做足夠的測試,確定。我不知道這種改變是否會在未來造成問題。

0

我們也有這個問題,我們設法追蹤到JRE版本,RhinoScriptEngine似乎不喜歡在JRE 6,JRE 7及以上版本運行斯坦福腳本,它工作正常。