[jboss-svn-commits] JBoss Common SVN: r2848 - in jbossxb/trunk/src: test/java/org/jboss/test/xml and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 22 12:53:08 EDT 2008


Author: darran.lofthouse at jboss.com
Date: 2008-05-22 12:53:08 -0400 (Thu, 22 May 2008)
New Revision: 2848

Modified:
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/SimpleTypeBindings.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/SoapEncUnitTestCase.java
Log:
[JBXB-141] xsd:double marshalled in exponential form.

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/SimpleTypeBindings.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/SimpleTypeBindings.java	2008-05-22 16:20:38 UTC (rev 2847)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/SimpleTypeBindings.java	2008-05-22 16:53:08 UTC (rev 2848)
@@ -201,7 +201,7 @@
 
       public String marshal(Object value)
       {
-         return String.valueOf(value);
+         return marshallDouble((Double)value);
       }
    };
 
@@ -1080,19 +1080,7 @@
       }
       else if(typeCode == XS_DOUBLE)
       {
-         Double d = (Double)value;
-         if(d.doubleValue() == Double.POSITIVE_INFINITY)
-         {
-            result = "INF";
-         }
-         else if(d.doubleValue() == Double.NEGATIVE_INFINITY)
-         {
-            result = "-INF";
-         }
-         else
-         {
-            result = d.toString();
-         }
+         result = marshallDouble((Double)value);
       }
       else if(typeCode == XS_BOOLEAN)
       {
@@ -2260,6 +2248,31 @@
       return result;
    }
 
+   private static String marshallDouble(Double d)
+   {	   
+      String result;
+      if(d.doubleValue() == Double.POSITIVE_INFINITY)
+      {
+         result = "INF";
+      }
+      else if(d.doubleValue() == Double.NEGATIVE_INFINITY)
+      {
+         result = "-INF";
+      }
+      else
+      {
+         DecimalFormat df = new DecimalFormat();
+         df.setGroupingUsed(false);
+         df.setMinimumFractionDigits(1);
+         df.setMaximumFractionDigits(18);
+         df.setMinimumIntegerDigits(1);
+         df.setMaximumIntegerDigits(18);
+         
+         result = df.format(d.doubleValue());
+      }
+      return result;	   
+   }
+   
    private static char convertDigit(int value)
    {
       value &= 0x0f;

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/SoapEncUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/SoapEncUnitTestCase.java	2008-05-22 16:20:38 UTC (rev 2847)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/SoapEncUnitTestCase.java	2008-05-22 16:53:08 UTC (rev 2848)
@@ -29,7 +29,6 @@
 import java.math.BigInteger;
 import java.net.URL;
 import java.util.Calendar;
-import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.Arrays;
 import java.util.TimeZone;
@@ -93,7 +92,7 @@
       "<varShort>-32768</varShort>" +
       "<varDecimal>3512359.1456</varDecimal>" +
       "<varFloat>1.4E-45</varFloat>" +
-      "<varDouble>4.9E-324</varDouble>" +
+      "<varDouble>0.0000000000000001</varDouble>" +
       "<varBoolean>false</varBoolean>" +
       "<varByte>-128</varByte>" +
       "<varQName xmlns=\"\">String2</varQName>" +
@@ -101,7 +100,7 @@
       "<varSoapString>String3</varSoapString>" +
       "<varSoapBoolean>false</varSoapBoolean>" +
       "<varSoapFloat>1.4E-45</varSoapFloat>" +
-      "<varSoapDouble>4.9E-324</varSoapDouble>" +
+      "<varSoapDouble>0.0000000000000001</varSoapDouble>" +
       "<varSoapDecimal>3512359.1111</varSoapDecimal>" +
       "<varSoapInt>-2147483648</varSoapInt>" +
       "<varSoapShort>-32768</varSoapShort>" +
@@ -199,7 +198,7 @@
          struct.setVarShort((short)Short.MIN_VALUE);
          struct.setVarDecimal(new BigDecimal("3512359.1456"));
          struct.setVarFloat((float)Float.MIN_VALUE);
-         struct.setVarDouble((double)Double.MIN_VALUE);
+         struct.setVarDouble(0.0000000000000001);
          struct.setVarBoolean(false);
          struct.setVarByte((byte)Byte.MIN_VALUE);
          struct.setVarQName(new QName("String2"));
@@ -220,7 +219,7 @@
          struct.setVarSoapString("String3");
          struct.setVarSoapBoolean(new Boolean(false));
          struct.setVarSoapFloat(new Float(Float.MIN_VALUE));
-         struct.setVarSoapDouble(new Double(Double.MIN_VALUE));
+         struct.setVarSoapDouble(new Double(0.0000000000000001));
          struct.setVarSoapDecimal(new BigDecimal("3512359.1111"));
          struct.setVarSoapInt(new Integer(Integer.MIN_VALUE));
          struct.setVarSoapShort(new Short(Short.MIN_VALUE));




More information about the jboss-svn-commits mailing list