Well done Andy. Right on the money, exactly what I discovered. On Sat, Nov 18, 2017 at 3:39 PM, Andy Seaborne <[email protected]> wrote:
> 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.buildS >>> tring( >>> 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) >>> >>> >> >> >> -- I like: Like Like - The likeliest place on the web <http://like-like.xenei.com> LinkedIn: http://www.linkedin.com/in/claudewarren
