Uploaded image for project: 'Apache Jena'
  1. Apache Jena
  2. JENA-231

NumberFormatException when casting to xsd:int in ARQ, with possible infinite loop

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • ARQ 2.9.0
    • ARQ 2.9.1
    • ARQ
    • None

    Description

      I'm running the following query on an empty dataset using the sparql command line command:

      PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
      SELECT (xsd:int(" 1") AS ?x) {}

      The result is an error:

      java.lang.NumberFormatException: For input string: " 1"

      I know that this is not a valid lexical form for xsd:int (note the extra space). But I expected this to produce an empty result set, like other non-int strings such as xsd:int("NaN"), and not an exception.

      The problem appears to be triggered by the presence of leading or trailing spaces around an otherwise correct number. The same problem is present when casting to other types such as xsd:decimal. The problem is not present for xsd:double.

      Command and full stack trace follows.

      (I have a user report of an infinite loop in ARQ code that I distilled down to this root issue. The report involved a cast to xsd:decimal in a FILTER expression. The dataset is a D2RQ dataset, and the values came from a CHAR column, hence the extra spaces. I have not succeeded in actually reproducing the infinite loop as I don't have access to the original database.)

      cygris:~$ sparql --query rob.sparql --data empty.nt
      Exception
      java.lang.NumberFormatException: For input string: " 1"
      at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
      at java.lang.Integer.parseInt(Integer.java:449)
      at java.math.BigInteger.<init>(BigInteger.java:316)
      at java.math.BigInteger.<init>(BigInteger.java:451)
      at com.hp.hpl.jena.sparql.expr.NodeValue._setByValue(NodeValue.java:957)
      at com.hp.hpl.jena.sparql.expr.NodeValue.nodeToNodeValue(NodeValue.java:915)
      at com.hp.hpl.jena.sparql.expr.NodeValue.makeNode(NodeValue.java:231)
      at com.hp.hpl.jena.sparql.expr.NodeValue.makeNode(NodeValue.java:238)
      at com.hp.hpl.jena.sparql.function.CastXSD$Instance.cast(CastXSD.java:96)
      at com.hp.hpl.jena.sparql.function.CastXSD_Numeric$Instance.cast(CastXSD_Numeric.java:61)
      at com.hp.hpl.jena.sparql.function.CastXSD$Instance.exec(CastXSD.java:86)
      at com.hp.hpl.jena.sparql.function.FunctionBase1.exec(FunctionBase1.java:53)
      at com.hp.hpl.jena.sparql.function.FunctionBase.exec(FunctionBase.java:68)
      at com.hp.hpl.jena.sparql.expr.E_Function.evalSpecial(E_Function.java:71)
      at com.hp.hpl.jena.sparql.expr.ExprFunctionN.eval(ExprFunctionN.java:102)
      at com.hp.hpl.jena.sparql.core.VarExprList.get(VarExprList.java:82)
      at com.hp.hpl.jena.sparql.engine.iterator.QueryIterAssign.accept(QueryIterAssign.java:68)
      at com.hp.hpl.jena.sparql.engine.iterator.QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java:64)
      at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108)
      at com.hp.hpl.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:65)
      at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108)
      at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40)
      at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108)
      at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40)
      at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108)
      at com.hp.hpl.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:72)
      at com.hp.hpl.jena.sparql.resultset.ResultSetMem.<init>(ResultSetMem.java:95)
      at com.hp.hpl.jena.sparql.resultset.TextOutput.write(TextOutput.java:147)
      at com.hp.hpl.jena.sparql.resultset.TextOutput.write(TextOutput.java:130)
      at com.hp.hpl.jena.sparql.resultset.TextOutput.write(TextOutput.java:118)
      at com.hp.hpl.jena.sparql.resultset.TextOutput.format(TextOutput.java:65)
      at com.hp.hpl.jena.query.ResultSetFormatter.out(ResultSetFormatter.java:134)
      at com.hp.hpl.jena.sparql.util.QueryExecUtils.outputResultSet(QueryExecUtils.java:169)
      at com.hp.hpl.jena.sparql.util.QueryExecUtils.doSelectQuery(QueryExecUtils.java:211)
      at com.hp.hpl.jena.sparql.util.QueryExecUtils.executeQuery(QueryExecUtils.java:75)
      at arq.query.queryExec(query.java:186)
      at arq.query.exec(query.java:145)
      at arq.cmdline.CmdMain.mainMethod(CmdMain.java:97)
      at arq.cmdline.CmdMain.mainRun(CmdMain.java:59)
      at arq.cmdline.CmdMain.mainRun(CmdMain.java:46)
      at arq.query.main(query.java:65)
      at arq.sparql.main(sparql.java:27)

      Attachments

        Activity

          People

            andy Andy Seaborne
            cygri Richard Cyganiak
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: