Issue1536
Created on 2010-01-07.14:09:12 by tiago182, last changed 2012-03-20.01:52:10 by fwierzbicki.
Messages | |||
---|---|---|---|
msg5417 (view) | Author: Tiago Fernandez (tiago182) | Date: 2010-01-07.14:09:11 | |
Here the test: import org.junit.Test; import javax.script.Bindings; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.SimpleBindings; import java.io.FileReader; import java.io.Reader; public class TestJSR223EvalWithReader { @Test public void should_reuse_reader_in_eval() throws Exception { final ScriptEngineManager manager = new ScriptEngineManager(); final String engineType = "jython"; final ScriptEngine engine = manager.getEngineByName(engineType); final Bindings bindings = new SimpleBindings(); bindings.put("firstLevelNodes", 10); bindings.put("secondLevelNodes", 5); engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE); final Reader dfsScript = new FileReader(getDepthFirstSearchPath(engineType)); for (int i = 1; i <= 10; i++) engine.eval(dfsScript); } private String getDepthFirstSearchPath(final String engineType) { if ("jython".equalsIgnoreCase(engineType)) return "src/test/scripts/py/DepthFirstSearch.py"; else if ("jruby".equalsIgnoreCase(engineType)) return "src/test/scripts/rb/DepthFirstSearch.rb"; else if ("rhino".equalsIgnoreCase(engineType)) return "src/test/scripts/js/DepthFirstSearch.js"; else if ("groovy".equalsIgnoreCase(engineType)) return "src/test/scripts/groovy/DepthFirstSearch.groovy"; throw new IllegalArgumentException("Invalid engine: " + engineType); } } = = = Here the script: class DFS: def __init__(self): self.visited_node_counter = 0 def visitor(self): self.visited_node_counter += 1 def visit(self, node): node.accept_visitor(self.visitor) for child in node.children: self.visit(child) class Node: def __init__(self): self.children = [] def add_child(self, node): self.children.append(node) def accept_visitor(self, visitor): visitor() root = Node() for i in xrange(0, firstLevelNodes): root.add_child(Node()) for child in root.children: for i in xrange(0, secondLevelNodes): child.add_child(Node()) dfs = DFS() dfs.visit(root) result = dfs.visited_node_counter = = = Just for the records, the same evaluation works well with other scripting engines, e.g. JRuby, Groovy, Rhino. |
|||
msg5418 (view) | Author: Tiago Fernandez (tiago182) | Date: 2010-01-07.14:14:50 | |
javax.script.ScriptException: java.lang.NullPointerException: java.lang.NullPointerException at org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:187) at org.python.jsr223.PyScriptEngine.compileScript(PyScriptEngine.java:89) at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:48) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:232) at TestJSR223EvalWithReader.should_reuse_reader_in_eval(TestJSR223EvalWithReader.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:94) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:165) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:60) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110) Caused by: java.lang.NullPointerException at org.python.core.ParserFacade.parseExpressionOrModule(ParserFacade.java:129) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:221) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:215) at org.python.jsr223.PyScriptEngine.compileScript(PyScriptEngine.java:84) at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:48) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:232) at TestJSR223EvalWithReader.should_reuse_reader_in_eval(TestJSR223EvalWithReader.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:94) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:165) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:60) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110) java.lang.NullPointerException: java.lang.NullPointerException at org.python.core.PyException.fillInStackTrace(PyException.java:70) at java.lang.Throwable.<init>(Throwable.java:181) at java.lang.Exception.<init>(Exception.java:29) at java.lang.RuntimeException.<init>(RuntimeException.java:32) at org.python.core.PyException.<init>(PyException.java:46) at org.python.core.PyException.<init>(PyException.java:43) at org.python.core.Py.JavaError(Py.java:455) at org.python.core.ParserFacade.fixParseError(ParserFacade.java:108) at org.python.core.ParserFacade.parseExpressionOrModule(ParserFacade.java:132) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:221) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:215) at org.python.jsr223.PyScriptEngine.compileScript(PyScriptEngine.java:84) ... 28 more Caused by: java.lang.NullPointerException at org.python.core.ParserFacade.parseExpressionOrModule(ParserFacade.java:129) ... 31 more |
|||
msg5452 (view) | Author: Nicholas Riley (nriley) | Date: 2010-01-24.01:33:13 | |
So there are two problems here: first, we're not dealing with an exception that occurs during parsing correctly; and second, we're closing the Reader after we finish compiling. The first problem is trivially fixable, and I have done so (r6963). I don't see anything in JSR 223 that mandates the Reader not be closed, but then again, I'm not sure why we're closing it. The original code came from Frank's parser work in r5005 (http://fisheye3.atlassian.com/changelog/jython/?cs=5005). Frank - do you remember why you did this? |
|||
msg6848 (view) | Author: Alan Kennedy (amak) | Date: 2012-03-19.19:58:34 | |
Is this still happening? Or has it been resolved? |
|||
msg6890 (view) | Author: Frank Wierzbicki (fwierzbicki) | Date: 2012-03-19.21:42:29 | |
I'll have a look at this. |
|||
msg6891 (view) | Author: Nicholas Riley (nriley) | Date: 2012-03-19.21:46:59 | |
Thanks, you have a better chance of actually having time to work on it :-) |
|||
msg6897 (view) | Author: Frank Wierzbicki (fwierzbicki) | Date: 2012-03-19.22:42:52 | |
Nicholas, Tiago: I dropped this test into 2.5 and it did not error - can I mark this as fixed (though it doesn't look like the parser code changed, maybe jsr223 in JDK 6 no longer has the problem? I'll check in the test code. |
|||
msg6900 (view) | Author: Frank Wierzbicki (fwierzbicki) | Date: 2012-03-19.22:54:50 | |
Scratch that - it looks like I can reproduce it if I run it with our "singlejavatest" target. Weird that it didn't error with the more general batch testing. |
|||
msg6902 (view) | Author: Alan Kennedy (amak) | Date: 2012-03-19.23:03:25 | |
Possibly related issue #1721 ? |
|||
msg6903 (view) | Author: Frank Wierzbicki (fwierzbicki) | Date: 2012-03-19.23:15:35 | |
Alan: huh probably not the same as #1721 - but I'll look at that one too while I'm poking with jsr223 :) |
|||
msg6907 (view) | Author: Frank Wierzbicki (fwierzbicki) | Date: 2012-03-20.01:49:14 | |
Fixed in r6420 - will be fixed in 2.5.3 |
|||
msg6908 (view) | Author: Frank Wierzbicki (fwierzbicki) | Date: 2012-03-20.01:52:10 | |
Looks like the rXXXX is still bound to svn - see http://hg.python.org/jython/rev/18e962064e6e for the changes. |
History | |||
---|---|---|---|
Date | User | Action | Args |
2012-03-20 01:52:10 | fwierzbicki | set | messages: + msg6908 |
2012-03-20 01:49:14 | fwierzbicki | set | status: open -> closed resolution: accepted -> fixed messages: + msg6907 |
2012-03-19 23:32:08 | fwierzbicki | set | priority: high type: crash resolution: accepted |
2012-03-19 23:15:35 | fwierzbicki | set | messages: + msg6903 |
2012-03-19 23:03:25 | amak | set | messages: + msg6902 |
2012-03-19 22:54:50 | fwierzbicki | set | messages: + msg6900 |
2012-03-19 22:42:52 | fwierzbicki | set | messages: + msg6897 |
2012-03-19 21:46:59 | nriley | set | messages: + msg6891 |
2012-03-19 21:42:29 | fwierzbicki | set | assignee: nriley -> fwierzbicki messages: + msg6890 |
2012-03-19 19:58:34 | amak | set | nosy:
+ amak messages: + msg6848 |
2010-08-15 17:19:51 | zyasoft | set | nosy: + zyasoft |
2010-01-24 01:33:14 | nriley | set | assignee: nriley messages: + msg5452 nosy: + nriley |
2010-01-08 18:39:56 | fwierzbicki | set | nosy: + fwierzbicki |
2010-01-07 14:14:51 | tiago182 | set | messages: + msg5418 |
2010-01-07 14:09:12 | tiago182 | create |
Supported by Python Software Foundation,
Powered by Roundup