You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by ra...@apache.org on 2008/03/26 23:12:34 UTC
svn commit: r641600 - in
/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl:
util/XsTypeConverter.java values/JavaDecimalHolder.java
Author: radup
Date: Wed Mar 26 15:12:12 2008
New Revision: 641600
URL: http://svn.apache.org/viewvc?rev=641600&view=rev
Log:
Fix for XMLBEANS-175 Validation of Decimal in exponential notation
Modified:
xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java
xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/JavaDecimalHolder.java
Modified: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java?rev=641600&r1=641599&r2=641600&view=diff
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/XsTypeConverter.java Wed Mar 26 15:12:12 2008
@@ -175,7 +175,52 @@
public static String printDecimal(BigDecimal value)
{
- return value.toString();
+ // We can't simply use value.toString() here, because in JDK1.5 that returns an
+ // exponent String and exponents are not allowed in XMLSchema decimal values
+ BigDecimal bd = value;
+ int scale = bd.scale();
+ if (scale < 0)
+ {
+ bd.setScale(0);
+ return printInteger(bd.unscaledValue());
+ }
+ else if (scale == 0)
+ return printInteger(bd.unscaledValue());
+ else
+ {
+ String intString = bd.unscaledValue().abs().toString();
+ int signum = bd.signum();
+ StringBuffer buf;
+ int insertionPoint = intString.length() - scale;
+ if (insertionPoint == 0)
+ { /* Point goes right before intVal */
+ buf = new StringBuffer(3 + intString.length());
+ buf.append(signum < 0 ? "-0." : "0.").append(intString);
+ }
+ else if (insertionPoint > 0)
+ { /* Point goes inside intVal */
+ buf = new StringBuffer(intString.length() + 2);
+ if (signum < 0)
+ {
+ buf.append('-').append(intString);
+ buf.insert(insertionPoint + 1, '.');
+ }
+ else
+ {
+ buf.append(intString);
+ buf.insert(insertionPoint, '.');
+ }
+ }
+ else
+ { /* We must insert zeros between point and intVal */
+ buf = new StringBuffer(3 - insertionPoint + intString.length());
+ buf.append(signum < 0 ? "-0." : "0.");
+ for (int i = 0; i < -insertionPoint; i++)
+ buf.append('0');
+ buf.append(intString);
+ }
+ return buf.toString();
+ }
}
// ======================== integer ========================
Modified: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/JavaDecimalHolder.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/JavaDecimalHolder.java?rev=641600&r1=641599&r2=641600&view=diff
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/JavaDecimalHolder.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/values/JavaDecimalHolder.java Wed Mar 26 15:12:12 2008
@@ -23,6 +23,7 @@
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.impl.common.ValidationContext;
import org.apache.xmlbeans.impl.schema.BuiltinSchemaTypeSystem;
+import org.apache.xmlbeans.impl.util.XsTypeConverter;
public class JavaDecimalHolder extends XmlObjectBase
{
@@ -34,7 +35,7 @@
// SIMPLE VALUE ACCESSORS BELOW -------------------------------------------
// sets/gets raw text value
- protected String compute_text(NamespaceManager nsm) { return _value.toString(); }
+ protected String compute_text(NamespaceManager nsm) { return XsTypeConverter.printDecimal(_value); }
protected void set_text(String s)
{
if (_validateOnSet())
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: commits-help@xmlbeans.apache.org