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

Node_Factory.createLiteralByValue creates malformed literals from BigDecimal values

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • Jena 2.13.0, Jena 3.0.0
    • Jena 3.0.1
    • Core, Datatypes
    • None

    Description

      I've been working with some numeric data and have run into some problems when using:

          Node_Factory.createLiteralByValue(Object value, RDFDatatype dtype) 
      

      when value is a BigDecimal.

      Jena ultimately uses BigDecimal.toString() to generate lexical forms for well-formed-ness checking and to provide results for .getLexicalForm() on the resulting Node_Literal. Unfortunately Java 1.5 changed the behaviour of BigDecimal.toString() and added BigDecimal.toPlainString() which it describes as an analog of the java 1.4 BigDecimal.toString() and which specifically does not use exponential notation in its output. xsd:decimal lexicalforms do not allow exponential notation

      I'll attached small java program that illustrates the problem. The cases where a dud literal form (i.e. as a literal in exponent from) are fair enough.

      I've also locally created a fix that special cases instances of BigDecimal in a couple of places. Patch file to be attached.

      With the fix applied the literals arising from Node_Factory.createLiteralByValue calls with a BigDecimal value are wellformed.

      Attachments

        1. git-diff.txt
          1 kB
          Stuart Williams
        2. BigDecimalTestCase.java
          2 kB
          Stuart Williams

        Activity

          People

            andy Andy Seaborne
            skw@lilac-cottage.org.uk Stuart Williams
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: