Fix coming shortly but the work around is... change:
Expr x = new NodeValueInteger(1) to: NodeValue nv = new NodeValueInteger(1) nv.asNode() Expr x = nv; Claude On Sat, Nov 18, 2017 at 3:48 PM, Claude Warren <cla...@xenei.com> wrote: > Well done Andy. Right on the money, exactly what I discovered. > > On Sat, Nov 18, 2017 at 3:39 PM, Andy Seaborne <a...@apache.org> 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 < >>> chris.dol...@epimorphics.com> >>> 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:1 >>>> 205) >>>> 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.v >>>> isit( >>>> ElementRewriter.java:70) >>>> at org.apache.jena.sparql.syntax.ElementFilter.visit( >>>> ElementFilter.java:35) >>>> at org.apache.jena.arq.querybuilder.rewriters.ElementRewriter.v >>>> isit( >>>> 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 > -- I like: Like Like - The likeliest place on the web <http://like-like.xenei.com> LinkedIn: http://www.linkedin.com/in/claudewarren