Sziasztok,
Belefutottam egy "érdekes" dologba, és nem igazán tudom mihez kezdjek vele. Adott egy JavaScript fájl, amit szeretnék futtatni. A kód így néz ki:
Resource calculatorJs = new UrlResource("http://localhost:8080/scripts/calculator.js");
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByName("nashorn");
Reader scriptReader = new InputStreamReader(calculatorJs.getInputStream());
engine.eval(scriptReader);
Tökéletesen működik, kivéve, hogy 2 Exception is belekerül a logba (illetve ugyanaz 2x):
java.lang.IllegalStateException: null
at org.springsource.loaded.MethodInvokerRewriter$RewriteClassAdaptor$RewritingMethodAdapter.visitInvokeDynamicInsn(MethodInvokerRewriter.java:997)
at sl.org.objectweb.asm.ClassReader.a(Unknown Source)
at sl.org.objectweb.asm.ClassReader.b(Unknown Source)
at sl.org.objectweb.asm.ClassReader.accept(Unknown Source)
at sl.org.objectweb.asm.ClassReader.accept(Unknown Source)
at org.springsource.loaded.MethodInvokerRewriter.rewrite(MethodInvokerRewriter.java:332)
at org.springsource.loaded.MethodInvokerRewriter.rewrite(MethodInvokerRewriter.java:96)
at org.springsource.loaded.TypeRegistry.methodCallRewriteUseCacheIfAvailable(TypeRegistry.java:830)
at org.springsource.loaded.agent.SpringLoadedPreProcessor.preProcess(SpringLoadedPreProcessor.java:317)
at org.springsource.loaded.agent.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:102)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at jdk.nashorn.internal.runtime.ScriptLoader.installClass(ScriptLoader.java:74)
at jdk.nashorn.internal.runtime.Context$ContextCodeInstaller.install(Context.java:130)
at jdk.nashorn.internal.codegen.Compiler.install(Compiler.java:408)
at jdk.nashorn.internal.codegen.Compiler.install(Compiler.java:447)
at jdk.nashorn.internal.runtime.Context.compile(Context.java:961)
at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:917)
at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:406)
at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:608)
at jdk.nashorn.api.scripting.NashornScriptEngine.createNashornGlobal(NashornScriptEngine.java:455)
at jdk.nashorn.api.scripting.NashornScriptEngine.(NashornScriptEngine.java:182)
at jdk.nashorn.api.scripting.NashornScriptEngine.(NashornScriptEngine.java:153)
at jdk.nashorn.api.scripting.NashornScriptEngineFactory.getScriptEngine(NashornScriptEngineFactory.java:141)
at javax.script.ScriptEngineManager.getEngineByName(ScriptEngineManager.java:238)
Az elsőt a engineManager.getEngineByName("nashorn"), a másodikat pedig a engine.eval(scriptReader) sor dobja. Kicsit utánnajártam a dolognak, és amikor a NashornScriptEngineFactory.getScriptEngine() adja vissza a NashornScriptEngine, közben kerül bele. Természetesen elkapni nem lehet, hiszen valaki valahol lekezeli a kivételt, csak csúnyálkodik a logban.
A dolog érdekessége, hogy tesztesetem is, annyi különbséggel, hogy abban @Before beállítom az eginet:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Reader scriptReader = new InputStreamReader(new FileSystemResource("public/scripts/calculator.js").getInputStream());
engine.eval(scriptReader);
Természetesen így is tökéletesen megy, és logba sem kerül semmi.
Nekem gyanús a kivétel első sora: at org.springsource.loaded.MethodInvokerRewriter$RewriteClassAdaptor$RewritingMethodAdapter.visitInvokeDynamicInsn(MethodInvokerRewriter.java:997) ?? mit keres ott a vezérlés? (amíg ezt olvassátok szerzek Spring sourcet, és meglesem)
Amivel próbálkoztam:
log4j.logger.jdk.nashorn.api.scripting.NashornScriptEngineFactory=FATAL
log4j.logger.jdk.nashorn.api.scripting.NashornScriptEngine=FATAL
log4j.logger.org.springsource.loaded.MethodInvokerRewriter=FATAL
de ezek nem segítettek.
Előre is köszönöm minden hozzászólást.