Hi Steven, I did look at the source code and I think the only case where this case is reached is if an argument is null. The execution order of SPARQL is often non-deterministic, and I believe that even if you place guard clauses (FILTERS) before a LET statements, the engine may still reach those lines. Therefore the function itself should be prepared to handle null values, and my code as well. I noticed that null values were not handled well in my SPINx implementation, but I have fixed this for the upcoming release. So your particular problem might go away in the next build, but you may still want to change your query to be more tolerant. One way would be to wrap each critical argument with something like an smf:if(bound(?var), ?var, my:dummy) call will pass in some other (non-null) value in either case.
Thanks, Holger On Jun 8, 2009, at 1:20 PM, Cambria, Steven wrote: > I have two different javascript functions that I’m calling in a > SPARQL query from the editor pane. The first round of calls work > fine, but anytime I attempt to call the functions more than once in > the same query, I receive a null pointer exception. I’ve confirmed > that the variables I’m passing in are not null by running a select > query on those variables w/o any javascript calls, and also by > filtering them out if they’re not bound. > > I’ve copied the composer’s stack trace below. > > java.lang.reflect.InvocationTargetException > at org.topbraidcomposer.sparql.view.SPARQLView$10.run(Unknown Source) > at org.topbraidcomposer.core.util.ThreadUtil$1$1.run(Unknown Source) > at java.lang.Thread.run(Unknown Source) > Caused by: java.lang.IllegalArgumentException: Error in JavaScript > call: java.lang.NullPointerException > at org.topbraid.spinx.javascript.JavaScriptFunction.exec(Unknown > Source) > at org.topbraid.sparql.functions.AbstractFunction.exec(Unknown Source) > at com.hp.hpl.jena.sparql.expr.E_Function.eval(E_Function.java:63) > at com.hp.hpl.jena.sparql.core.VarExprList.get(VarExprList.java:60) > at > com > .hp > .hpl > .jena > .sparql.engine.iterator.QueryIterAssign.accept(QueryIterAssign.java: > 42) > at > com > .hp > .hpl > .jena > .sparql > .engine > .iterator > .QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java: > 54) > at > com > .hp > .hpl > .jena > .sparql > .engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:69) > at > com > .hp > .hpl > .jena > .sparql > .engine > .iterator > .QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:85) > at > com > .hp > .hpl > .jena > .sparql > .engine > .iterator > .QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:54) > at > com > .hp > .hpl > .jena > .sparql > .engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:69) > at > com.hp.hpl.jena.sparql.algebra.table.TableN.materialize(TableN.java: > 36) > at com.hp.hpl.jena.sparql.algebra.table.TableN.<init>(TableN.java:31) > at > com.hp.hpl.jena.sparql.algebra.TableFactory.create(TableFactory.java: > 37) > at > com > .hp > .hpl > .jena > .sparql > .engine > .main.iterator.QueryIterJoinBase.<init>(QueryIterJoinBase.java:35) > at > com > .hp > .hpl > .jena > .sparql > .engine > .main.iterator.QueryIterLeftJoin.<init>(QueryIterLeftJoin.java:18) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java: > 227) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java: > 100) > at > com.hp.hpl.jena.sparql.algebra.op.OpLeftJoin.visit(OpLeftJoin.java:43) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:33) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.executeOp(OpExecutor.java: > 102) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java: > 280) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java: > 128) > at com.hp.hpl.jena.sparql.algebra.op.OpFilter.visit(OpFilter.java:79) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:33) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.executeOp(OpExecutor.java: > 102) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java: > 350) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java: > 177) > at com.hp.hpl.jena.sparql.algebra.op.OpLabel.visit(OpLabel.java:61) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:33) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.executeOp(OpExecutor.java: > 102) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java:78) > at com.hp.hpl.jena.sparql.engine.main.QC.execute(QC.java:37) > at > com > .hp > .hpl > .jena.sparql.engine.main.QueryEngineMain.eval(QueryEngineMain.java:42) > at > com > .hp > .hpl > .jena.sparql.engine.QueryEngineBase.createPlan(QueryEngineBase.java: > 102) > at > com > .hp > .hpl.jena.sparql.engine.QueryEngineBase.getPlan(QueryEngineBase.java: > 91) > at com.hp.hpl.jena.sparql.engine.main.QueryEngineMain > $1.create(QueryEngineMain.java:67) > at > com > .hp > .hpl > .jena > .sparql.engine.QueryExecutionBase.getPlan(QueryExecutionBase.java:284) > at > com > .hp > .hpl > .jena > .sparql > .engine > .QueryExecutionBase.startQueryIterator(QueryExecutionBase.java:261) > at > com > .hp > .hpl > .jena > .sparql > .engine.QueryExecutionBase.execResultSet(QueryExecutionBase.java:266) > at > com > .hp > .hpl > .jena > .sparql.engine.QueryExecutionBase.execSelect(QueryExecutionBase.java: > 94) > at org.topbraidcomposer.sparql.view.SPARQLView$10.runSelect(Unknown > Source) > ... 3 more > Caused by: java.lang.NullPointerException > at org.topbraid.spinx.javascript.JavaScriptFunction.node2Arg(Unknown > Source) > ... 44 more > Root exception: > java.lang.IllegalArgumentException: Error in JavaScript call: > java.lang.NullPointerException > at org.topbraid.spinx.javascript.JavaScriptFunction.exec(Unknown > Source) > at org.topbraid.sparql.functions.AbstractFunction.exec(Unknown Source) > at com.hp.hpl.jena.sparql.expr.E_Function.eval(E_Function.java:63) > at com.hp.hpl.jena.sparql.core.VarExprList.get(VarExprList.java:60) > at > com > .hp > .hpl > .jena > .sparql.engine.iterator.QueryIterAssign.accept(QueryIterAssign.java: > 42) > at > com > .hp > .hpl > .jena > .sparql > .engine > .iterator > .QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java: > 54) > at > com > .hp > .hpl > .jena > .sparql > .engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:69) > at > com > .hp > .hpl > .jena > .sparql > .engine > .iterator > .QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:85) > at > com > .hp > .hpl > .jena > .sparql > .engine > .iterator > .QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:54) > at > com > .hp > .hpl > .jena > .sparql > .engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:69) > at > com.hp.hpl.jena.sparql.algebra.table.TableN.materialize(TableN.java: > 36) > at com.hp.hpl.jena.sparql.algebra.table.TableN.<init>(TableN.java:31) > at > com.hp.hpl.jena.sparql.algebra.TableFactory.create(TableFactory.java: > 37) > at > com > .hp > .hpl > .jena > .sparql > .engine > .main.iterator.QueryIterJoinBase.<init>(QueryIterJoinBase.java:35) > at > com > .hp > .hpl > .jena > .sparql > .engine > .main.iterator.QueryIterLeftJoin.<init>(QueryIterLeftJoin.java:18) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java: > 227) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java: > 100) > at > com.hp.hpl.jena.sparql.algebra.op.OpLeftJoin.visit(OpLeftJoin.java:43) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:33) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.executeOp(OpExecutor.java: > 102) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java: > 280) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java: > 128) > at com.hp.hpl.jena.sparql.algebra.op.OpFilter.visit(OpFilter.java:79) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:33) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.executeOp(OpExecutor.java: > 102) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java: > 350) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.visit(ExecutionDispatch.java: > 177) > at com.hp.hpl.jena.sparql.algebra.op.OpLabel.visit(OpLabel.java:61) > at > com > .hp > .hpl > .jena > .sparql.engine.main.ExecutionDispatch.exec(ExecutionDispatch.java:33) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.executeOp(OpExecutor.java: > 102) > at > com > .hp.hpl.jena.sparql.engine.main.OpExecutor.execute(OpExecutor.java:78) > at com.hp.hpl.jena.sparql.engine.main.QC.execute(QC.java:37) > at > com > .hp > .hpl > .jena.sparql.engine.main.QueryEngineMain.eval(QueryEngineMain.java:42) > at > com > .hp > .hpl > .jena.sparql.engine.QueryEngineBase.createPlan(QueryEngineBase.java: > 102) > at > com > .hp > .hpl.jena.sparql.engine.QueryEngineBase.getPlan(QueryEngineBase.java: > 91) > at com.hp.hpl.jena.sparql.engine.main.QueryEngineMain > $1.create(QueryEngineMain.java:67) > at > com > .hp > .hpl > .jena > .sparql.engine.QueryExecutionBase.getPlan(QueryExecutionBase.java:284) > at > com > .hp > .hpl > .jena > .sparql > .engine > .QueryExecutionBase.startQueryIterator(QueryExecutionBase.java:261) > at > com > .hp > .hpl > .jena > .sparql > .engine.QueryExecutionBase.execResultSet(QueryExecutionBase.java:266) > at > com > .hp > .hpl > .jena > .sparql.engine.QueryExecutionBase.execSelect(QueryExecutionBase.java: > 94) > at org.topbraidcomposer.sparql.view.SPARQLView$10.runSelect(Unknown > Source) > at org.topbraidcomposer.sparql.view.SPARQLView$10.run(Unknown Source) > at org.topbraidcomposer.core.util.ThreadUtil$1$1.run(Unknown Source) > at java.lang.Thread.run(Unknown Source) > Caused by: java.lang.NullPointerException > at org.topbraid.spinx.javascript.JavaScriptFunction.node2Arg(Unknown > Source) > ... 44 more > > Thanks, > > Steve > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "TopBraid Composer Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/topbraid-composer-users?hl=en -~----------~----~----~----~------~----~------~--~---
