我收到了一个与我使用Rhino的项目有关的奇怪电子邮件(没有Java 8,因此我无法使用Nashorn)。原文here。这家伙收到了巨大的堆栈跟踪和关元(我认为)是最后一个读取(格式化略):”ExecutionException::无法将属性添加到密封对象。“除了我不...什么是错的?
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
是我的。与罪魁祸首线相关的代码片段是这样的(SCOPE
是Scriptable
; REGEX_IS_VALID
和REG_MATCH
是[犀牛] 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();
}
}
经过一番周围的Googling,所有我能收集到的信息是,此异常当您密封上下文(我所做的)并尝试重新定义标准库的函数(或者JavaScript的其他名称,我不知道该语言)时会发生。例如,在this link,海报尝试并重新定义:
Date.LZ = function(x) {return(x<0||x>9?"":"0")+x};
而且注意,在堆栈跟踪尝试覆盖的名。但我没有,我也不相信我会做这种事。我唯一的JavaScript代码是(我知道,错误的命名):
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);"
+ '}';
这是我第一次看到这个错误。这家伙还说,没有比我的其他软件包拉犀牛依赖...
那么,这里发生了什么?我怎样才能绕过这个问题?这是否意味着上下文已经在其他地方密封了?但如果这个人不使用犀牛“除我之外”,这怎么会发生?
编辑:用户找到的解决方法...他有一个依赖Weblogic导致的错误。