使用JDK自带java.util.logging.Logger引起的冲突问题
现象:
应用代码如下:
import javax.script.ScriptEngineManager;
ScriptEngineManager manager = new ScriptEngineManager();
manager.getEngineByName("JavaScript");
在TongWeb8上运行出错,日志如下:
Servlet.service() for servlet [aaa] in context with path [web] threw exception [Servlet execution threw an exception] with root cause java.lang.NullPointerException
at java.lang.invoke.MethodHandles.insertArgumentsChecks(MethodHandles.java:2400)
at java.lang.invoke.MethodHandles.insertArguments(MethodHandles.java:2369)
at jdk.nashorn.internal.lookup.MethodHandleFactory.addDebugPrintout(MethodHandleFactory.java:287)
at jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.debug(MethodHandleFactory.java:376)
at jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.findStatic(MethodHandleFactory.java:543)
at jdk.nashorn.internal.lookup.Lookup.findOwnMH(Lookup.java:225)
at jdk.nashorn.internal.lookup.Lookup.<clinit>(Lookup.java:54)
at jdk.nashorn.internal.codegen.CompilerConstants.staticCall(CompilerConstants.java:579)
at jdk.nashorn.internal.runtime.JSType.<clinit>(JSType.java:82)
Servlet.service() for servlet [aaa] in context with path [web] threw exception [Servlet execution threw an exception] with root cause java.lang.NoClassDefFoundError: Could not initialize class jdk.nashorn.internal.lookup.MethodHandleFactory
at jdk.nashorn.internal.runtime.Context.initLoggers(Context.java:1404)
at jdk.nashorn.internal.runtime.Context.<init>(Context.java:549)
at jdk.nashorn.internal.runtime.Context.<init>(Context.java:466)
at jdk.nashorn.api.scripting.NashornScriptEngine$1.run(NashornScriptEngine.java:129)
at jdk.nashorn.api.scripting.NashornScriptEngine$1.run(NashornScriptEngine.java:125)
at java.security.AccessController.doPrivileged(Native Method)
at jdk.nashorn.api.scripting.NashornScriptEngine.<init>(NashornScriptEngine.java:125)
at jdk.nashorn.api.scripting.NashornScriptEngineFactory.getScriptEngine(NashornScriptEngineFactory.java:148)
at javax.script.ScriptEngineManager.getEngineByName(ScriptEngineManager.java:238)
原因及解决办法:
TongWeb8接管了java.util.logging.Logger日志,可以关闭 “接管 Java Logger” 来解决。