OSDN Git Service

Improved validation and made error messages much more useful
authorblaine.dev <blaine.dev@75d07b2b-3a1a-0410-a2c5-0572b91ccdca>
Sat, 25 Jul 2009 04:33:00 +0000 (04:33 +0000)
committerblaine.dev <blaine.dev@75d07b2b-3a1a-0410-a2c5-0572b91ccdca>
Sat, 25 Jul 2009 04:33:00 +0000 (04:33 +0000)
git-svn-id: http://jmonkeyengine.googlecode.com/svn/trunk@4550 75d07b2b-3a1a-0410-a2c5-0572b91ccdca

src/com/jme/util/export/xml/DOMInputCapsule.java
src/com/jme/util/export/xml/DOMOutputCapsule.java

index 35b623e..131b7e0 100644 (file)
@@ -152,8 +152,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of bytes.  size says "
-                            + requiredSize + ", data contains "
+                    throw new IOException("Wrong number of bytes for '" + name
+                            + "'.  size says " + requiredSize
+                            + ", data contains "
                             + strings.length);
             }
             byte[] tmp = new byte[strings.length];
@@ -252,9 +253,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of ints.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of ints for '" + name
+                            + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             int[] tmp = new int[strings.length];
             for (int i = 0; i < tmp.length; i++) {
@@ -355,9 +356,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of floats.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of floats for '" + name
+                            + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             float[] tmp = new float[strings.length];
             for (int i = 0; i < tmp.length; i++) {
@@ -441,9 +442,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of doubles.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of doubles for '"
+                            + name + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             double[] tmp = new double[strings.length];
             for (int i = 0; i < tmp.length; i++) {
@@ -540,9 +541,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of longs.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of longs for '" + name
+                            + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             long[] tmp = new long[strings.length];
             for (int i = 0; i < tmp.length; i++) {
@@ -639,9 +640,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of shorts.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of shorts for '"
+                            + name + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             short[] tmp = new short[strings.length];
             for (int i = 0; i < tmp.length; i++) {
@@ -735,9 +736,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of bools.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of bools for '" + name
+                            + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             boolean[] tmp = new boolean[strings.length];
             for (int i = 0; i < tmp.length; i++) {
@@ -1060,9 +1061,9 @@ public class DOMInputCapsule implements InputCapsule {
                 if (sizeString.length() > 0) {
                     int requiredSize = Integer.parseInt(sizeString);
                     if (savables.size() != requiredSize)
-                        throw new IOException("Wrong number of Savables.  size says "
-                                + requiredSize + ", data contains "
-                                + savables.size());
+                        throw new IOException("Wrong number of Savables for '"
+                                + name + "'.  size says " + requiredSize
+                                + ", data contains " + savables.size());
                 }
                 ret = savables.toArray(new Savable[0]);
             }
@@ -1128,9 +1129,10 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (savables.size() != requiredSize)
-                    throw new IOException("Wrong number of Savable rrays.  size says "
-                            + requiredSize + ", data contains "
-                            + savables.size());
+                    throw new IOException(
+                            "Wrong number of Savable arrays for '" + name
+                            + "'.  size says " + requiredSize
+                            + ", data contains " + savables.size());
             }
             currentElem = (Element) tmpEl.getParentNode();
             return savables;
@@ -1329,9 +1331,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of float buffers.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of float buffers for '"
+                            + name + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             FloatBuffer tmp = BufferUtils.createFloatBuffer(strings.length);
             for (String s : strings) tmp.put(Float.parseFloat(s));
@@ -1362,9 +1364,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of int buffers.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of int buffers for '"
+                            + name + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             IntBuffer tmp = BufferUtils.createIntBuffer(strings.length);
             for (String s : strings) tmp.put(Integer.parseInt(s));
@@ -1395,9 +1397,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of byte buffers.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of byte buffers for '"
+                            + name + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             ByteBuffer tmp = BufferUtils.createByteBuffer(strings.length);
             for (String s : strings) tmp.put(Byte.valueOf(s));
@@ -1428,9 +1430,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (strings.length != requiredSize)
-                    throw new IOException("Wrong number of short buffers.  size says "
-                            + requiredSize + ", data contains "
-                            + strings.length);
+                    throw new IOException("Wrong number of short buffers for '"
+                            + name + "'.  size says " + requiredSize
+                            + ", data contains " + strings.length);
             }
             ShortBuffer tmp = BufferUtils.createShortBuffer(strings.length);
             for (String s : strings) tmp.put(Short.valueOf(s));
@@ -1466,9 +1468,9 @@ public class DOMInputCapsule implements InputCapsule {
             if (sizeString.length() > 0) {
                 int requiredSize = Integer.parseInt(sizeString);
                 if (tmp.size() != requiredSize)
-                    throw new IOException("Wrong number of short buffers.  size says "
-                            + requiredSize + ", data contains "
-                            + tmp.size());
+                    throw new IOException("Wrong number of short buffers for '"
+                            + name + "'.  size says " + requiredSize
+                            + ", data contains " + tmp.size());
             }
             currentElem = (Element) tmpEl.getParentNode();
             return tmp;
index 6d9caec..ac9c6d1 100644 (file)
@@ -661,10 +661,17 @@ public class DOMOutputCapsule implements OutputCapsule {
         StringBuilder buf = new StringBuilder();
         int pos = value.position();
         value.rewind();
+        int ctr = 0;
         while (value.hasRemaining()) {
+            ctr++;
             buf.append(value.get());
             buf.append(" ");
         }
+        if (ctr != value.limit())
+            throw new IOException("'" + name
+                + "' buffer contention resulted in write data consistency.  "
+                + ctr + " values written when should have written "
+                + value.limit());
         buf.setLength(Math.max(0, buf.length() - 1));
         value.position(pos);
         el.setAttribute(dataAttributeName, buf.toString());
@@ -684,10 +691,17 @@ public class DOMOutputCapsule implements OutputCapsule {
         StringBuilder buf = new StringBuilder();
         int pos = value.position();
         value.rewind();
+        int ctr = 0;
         while (value.hasRemaining()) {
+            ctr++;
             buf.append(value.get());
             buf.append(" ");
         }
+        if (ctr != value.limit())
+            throw new IOException("'" + name
+                + "' buffer contention resulted in write data consistency.  "
+                + ctr + " values written when should have written "
+                + value.limit());
         buf.setLength(buf.length() - 1);
         value.position(pos);
         el.setAttribute(dataAttributeName, buf.toString());
@@ -703,10 +717,17 @@ public class DOMOutputCapsule implements OutputCapsule {
         StringBuilder buf = new StringBuilder();
         int pos = value.position();
         value.rewind();
+        int ctr = 0;
         while (value.hasRemaining()) {
+            ctr++;
             buf.append(value.get());
             buf.append(" ");
         }
+        if (ctr != value.limit())
+            throw new IOException("'" + name
+                + "' buffer contention resulted in write data consistency.  "
+                + ctr + " values written when should have written "
+                + value.limit());
         buf.setLength(buf.length() - 1);
         value.position(pos);
         el.setAttribute(dataAttributeName, buf.toString());
@@ -726,10 +747,17 @@ public class DOMOutputCapsule implements OutputCapsule {
         StringBuilder buf = new StringBuilder();
         int pos = value.position();
         value.rewind();
+        int ctr = 0;
         while (value.hasRemaining()) {
+            ctr++;
             buf.append(value.get());
             buf.append(" ");
         }
+        if (ctr != value.limit())
+            throw new IOException("'" + name
+                + "' buffer contention resulted in write data consistency.  "
+                + ctr + " values written when should have written "
+                + value.limit());
         buf.setLength(buf.length() - 1);
         value.position(pos);
         el.setAttribute(dataAttributeName, buf.toString());