“ExecutionException ::无法向密封对象添加属性。”除了我不...有什么问题?

时间:2014-04-15 17:20:54

标签: java javascript rhino

我收到了一个与我使用Rhino的项目相关的奇怪电子邮件(没有Java 8,所以我不能使用Nashorn)。原帖[{3}}。那家伙收到一个巨大的堆栈跟踪,相关元素(我认为)是最后一个读取(重新格式化了一点):

Caused by: org.mozilla.javascript.EvaluatorException: 
        Cannot add a property to a sealed object.
    at org.mozilla.javascript.DefaultErrorReporter.runtimeError(DefaultErrorReporter.java:61)
    at org.mozilla.javascript.Context.reportRuntimeError(Context.java:549)
    at org.mozilla.javascript.Context.reportRuntimeError(Context.java:587)
    at org.mozilla.javascript.Context.reportRuntimeError0(Context.java:557)
    at org.mozilla.javascript.ScriptableObject.addSlot(ScriptableObject.java:1660)
    at org.mozilla.javascript.ScriptableObject.getSlotToSet(ScriptableObject.java:1627)
    at org.mozilla.javascript.ScriptableObject.put(ScriptableObject.java:223)
    at org.mozilla.javascript.IdScriptable.put(IdScriptable.java:150)
    at org.mozilla.javascript.ScriptableObject.defineProperty(ScriptableObject.java:1036)
    at org.mozilla.javascript.IdScriptable.defineProperty(IdScriptable.java:233)
    at org.mozilla.javascript.ScriptableObject.defineProperty(ScriptableObject.java:1057)
    at org.mozilla.javascript.IdScriptable.addIdFunctionProperty(IdScriptable.java:451)
    at org.mozilla.javascript.NativeString.fillConstructorProperties(NativeString.java:81)
    at org.mozilla.javascript.IdScriptable.addAsPrototype(IdScriptable.java:424)
    at org.mozilla.javascript.NativeString.init(NativeString.java:60)
    at org.mozilla.javascript.Context.initStandardObjects(Context.java:656)
    at com.github.fge.jsonschema.core.util.RhinoHelper.<clinit>(RhinoHelper.java:92)
    ... 72 more

RhinoHelper.java:92是我的。带有罪魁祸首的相关代码段是这样的(SCOPEScriptable; REGEX_IS_VALIDREG_MATCH是[rhino] Function s):

static {
    final Context ctx = Context.enter();
    try {
        SCOPE = ctx.initStandardObjects(null, true); // <-- FAILS HERE
        ctx.evaluateString(SCOPE, jsAsString, "re", 1, null);
        REGEX_IS_VALID = (Function) SCOPE.get("regexIsValid", SCOPE);
        REG_MATCH = (Function) SCOPE.get("regMatch", SCOPE);
    } finally {
        Context.exit();
    }
}

经过一些谷歌搜索后,我可以收集到的所有信息都是当你密封上下文(我这样做)并尝试重新定义一个函数(或者JavaScript的名称,我没有&#39;知道标准库的语言。例如,在here中,海报尝试并重新定义:

Date.LZ = function(x) {return(x<0||x>9?"":"0")+x};

请注意,堆栈跟踪中存在尝试覆盖的名称。但我不知道,我也不相信我会做那种事情。我唯一的JavaScript&#34;代码&#34;这是(我知道,错误的命名):

private static final String jsAsString
    = "function regexIsValid(re)"
    + '{'
    + "    try {"
    + "         new RegExp(re);"
    + "         return true;"
    + "    } catch (e) {"
    + "        return false;"
    + "    }"
    + '}'
    + ""
    + "function regMatch(re, input)"
    + '{'
    + "    return new RegExp(re).test(input);"
    + '}';

这是我第一次看到这个错误。这家伙还说,没有其他包装可以吸引Rhino依赖......

那么,这里发生了什么?我该如何规避这个问题?这是否意味着背景已经被其他地方封存了?但是,如果这个人没有使用Rhino&#34;除了我和#34;这怎么可能发生?


编辑:用户找到的解决方法......他对Weblogic有依赖导致了这个错误。

1 个答案:

答案 0 :(得分:0)

好的,所以我解决了问题......

犀牛的知识在互联网上确实非常稀缺,但无论如何,我以最简单的方式解决了这个问题:

-        SCOPE = ctx.initStandardObjects(null, true);
+        SCOPE = ctx.initStandardObjects(null, false);