c.f. NodeValue.getNode and NodeValue.asNode Presumably something calls getNode when it wanted asNode.
On 18/11/17 15:36, Claude Warren wrote:
This is a bug. The problem is that new NodeValueInteger(1); does not set the Node value that the rewriter is trying to rewrite and thus the null pointer exception. I will get a fix out shortly. Claude On Fri, Nov 17, 2017 at 4:14 PM, Chris Dollin <[email protected]> wrote:Hi, I was experimenting with the query builder and hit a problem when I was attempting to construct an Expr. This example: package com.epimorphics.scratch; import org.apache.jena.arq.querybuilder.ConstructBuilder; import org.apache.jena.sparql.expr.E_GreaterThan; import org.apache.jena.sparql.expr.Expr; import org.apache.jena.sparql.expr.ExprVar; import org.apache.jena.sparql.expr.nodevalue.NodeValueInteger; import org.junit.Test; public class Example { @Test public void tryBuilding() { ConstructBuilder cb = new ConstructBuilder(); Expr x = new NodeValueInteger(1); Expr y = new ExprVar("y"); Expr e = new E_GreaterThan(x, y); cb.addFilter(e); System.err.println(cb.buildString()); } } when run fails with a null pointer exception: java.lang.NullPointerException at org.apache.jena.arq.querybuilder.rewriters. AbstractRewriter.changeNode(AbstractRewriter.java:126) at org.apache.jena.arq.querybuilder.rewriters.NodeValueRewriter.visit( NodeValueRewriter.java:64) at org.apache.jena.sparql.expr.nodevalue.NodeValueInteger. visit(NodeValueInteger.java:78) at org.apache.jena.arq.querybuilder.rewriters.ExprRewriter.visit( ExprRewriter.java:127) at org.apache.jena.sparql.expr.NodeValue.visit(NodeValue.java:1205) at org.apache.jena.arq.querybuilder.rewriters.ExprRewriter.visit( ExprRewriter.java:65) at org.apache.jena.sparql.expr.ExprFunction2.visit( ExprFunction2.java:109) at org.apache.jena.arq.querybuilder.rewriters.ElementRewriter.visit( ElementRewriter.java:70) at org.apache.jena.sparql.syntax.ElementFilter.visit( ElementFilter.java:35) at org.apache.jena.arq.querybuilder.rewriters.ElementRewriter.visit( ElementRewriter.java:141) at org.apache.jena.sparql.syntax.ElementGroup.visit( ElementGroup.java:120) at org.apache.jena.arq.querybuilder.handlers.WhereHandler.addAll( WhereHandler.java:81) at org.apache.jena.arq.querybuilder.handlers.HandlerBlock.addAll( HandlerBlock.java:218) at org.apache.jena.arq.querybuilder.handlers.HandlerBlock.addAll( HandlerBlock.java:245) at org.apache.jena.arq.querybuilder.AbstractQueryBuilder.build( AbstractQueryBuilder.java:555) at org.apache.jena.arq.querybuilder.AbstractQueryBuilder.buildString( AbstractQueryBuilder.java:522) at com.epimorphics.scratch.Example.tryBuilding(Example.java:20) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall( FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run( ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively( FrameworkMethod.java:44) at org.junit.internal.runners.statements.InvokeMethod. evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild( BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild( BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.junit.runner.JUnitCore.run(JUnitCore.java:160) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs( JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater. startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter. prepareStreamsAndStart( JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main( JUnitStarter.java:70) Replacing the addFilter line with cb.addFilter("1 > ?y"); does not fail, terminating with the expected print-out of a construct query CONSTRUCT { } WHERE { FILTER ( 1 > ?y )} I tried poking around with the debugger but couldn't see anyhting obvious. However, /sometimes/ stepping through the code results in it working and sometimes not, presumably depending on exactly when I give up through-stepping. Am I doing anything obviously wrong (like misunderstanding how to use the Expr functionality) or should I file a JIRA? This is Jena 3.4.0. Chris -- "What I don't understand is this ..." Trevor Chaplin, /The Beiderbeck Affair/ Epimorphics Ltd, http://www.epimorphics.com Registered address: Court Lodge, 105 High Street, Portishead, Bristol BS20 6PT Epimorphics Ltd. is a limited company registered in England (number 7016688)
