我无法使用JDK 6运行以下代码。 它引发了一个例外:
线程“main”中的异常org.mozilla.javascript.EcmaError:ReferenceError:未定义“XML”。
我的环境如下:Ubuntu 11.04,JDK 6,Rhino 1.7R2(也使用Rhino 1.7R3测试)
String script = "function abc(x) {var dd = new XML();}";
Context context = Context.enter();
try {
ScriptableObject scope = context.initStandardObjects();
Scriptable that = context.newObject(scope);
Function fct = context.compileFunction(scope, script, "script", 1, null);
Object result = fct.call(context, scope, that, new Object[] {2});
}
catch(Exception e){
e.printStackTrace();
}
finally {
Context.exit();
}
答案 0 :(得分:2)
我有同样的问题→在Rhino shell中E4X工作正常,但在嵌入模式下 - ReferenceError:“XML”未定义。
这是老Xerces的问题,我在运行我的应用程序时在类路径中有2.6.2。当我将其更新为2.11时,问题就消失了。
$ java -cp js.jar:xerces-2.6.2.jar org.mozilla.javascript.tools.shell.Main
Rhino 1.7 release 3 2011 05 09
js> var x = <foo/>;
js: uncaught JavaScript runtime exception: ReferenceError: "XML" is not defined.
和
$ java -cp js.jar org.mozilla.javascript.tools.shell.Main
Rhino 1.7 release 3 2011 05 09
js> var x = <foo/>;
js> x.toXMLString();
<foo/>
看起来当Rhino找到Xerces时,它使用它,而不是自己的机制来解析XML(当我在类路径中使用js.jar启动Shell时)。