You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xmlbeans.apache.org by "Johannes Stamminger (JIRA)" <xm...@xml.apache.org> on 2005/07/25 14:40:48 UTC

[jira] Commented: (XMLBEANS-175) Validation of decimal in exponential representation fails

    [ http://issues.apache.org/jira/browse/XMLBEANS-175?page=comments#action_12316660 ] 

Johannes Stamminger commented on XMLBEANS-175:
----------------------------------------------

My documentation was not correct (and the other parser neighther), but I still believe xmlbeans should be changed concerning handling of decimals:

according http://www.w3.org/TR/xmlschema-2/#decimal exponential representation is not allowed. Though java.lang.BigDecimal does.

In my app I build up the document in memory using the xmlbeans created API. There the schema-decimal is mapped to java BigDecimals. When setting such value and having exponential representation, this string is complained about when validating the document (and is written to output on saving).

IMHO xmlbeans should not use the BigDecimal#toString() but BigDecimal#toPlainString() (1E1 becomes 10 this way) when validating/saving/... .

Workaround is to do so "from outside" at the moment, here some junit test for the attached schema/xmlbeans generated library that currently fails:

    public void testDecimal() {
        final TestExponentDocument.TestExponent exponent = TestExponentDocument.TestExponent.Factory.newInstance();
        exponent.setDecimal(new BigDecimal("1E1"));
        final ArrayList errors = new ArrayList();
        final XmlOptions validationOptions = new XmlOptions();
        validationOptions.setErrorListener(errors);
        exponent.validate(validationOptions);
        assertEquals(0, errors.size()); // fails, IMHO should not!

        // workaround
        exponent.setDecimal(new BigDecimal(new BigDecimal("1E1").toPlainString()));
        errors.removeAll(errors);
        exponent.validate(validationOptions);
        assertEquals(0, errors.size());
    }


One additional note on the error handling here: it is not very helpfull only to report the wrong char. Message should contain at least the complete number String.

> Validation of decimal in exponential representation fails
> ---------------------------------------------------------
>
>          Key: XMLBEANS-175
>          URL: http://issues.apache.org/jira/browse/XMLBEANS-175
>      Project: XMLBeans
>         Type: Bug
>   Components: Validator
>     Versions: Version 2
>     Reporter: Johannes Stamminger
>  Attachments: TestExponent.jar, TestExponent.xsd, XMLBeansExponentTest.java
>
> Having an attribute of type xsd:decimal. Validating a document having set the attribute to "4.2E1" fails with error message "unexpected char '69'" (char '69' is the E). Value "42" works fine.
> Other XML parsers validate "4.2E1" successfully.
> Parsing fails in org.apache.xmlbeans.impl.values.JavaDecimalHolder#validateLexical(String, ValidationContext).
> BTW: according to my XML documentation, type xsd:decimal is "same as java.math.BigDecimal".
> If this info is correct: IMHO it would be better to rely the BigDecimal-parsing capability ... ?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org