2014-04-15 26 views
0

我收到了一个与我使用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是我的。与罪魁祸首线相关的代码片段是这样的(SCOPEScriptable; REGEX_IS_VALIDREG_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导致的错误。

回答

0

OK,所以我固定的问题...

犀牛知识是真正在互联网上出奇的稀少,但无论如何,我固定它的最简单可行的方法:

-  SCOPE = ctx.initStandardObjects(null, true); 
+  SCOPE = ctx.initStandardObjects(null, false); 
相关问题