You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by do...@apache.org on 2010/02/10 23:50:00 UTC

svn commit: r908715 - in /ofbiz/trunk/framework/base/src/org/ofbiz/base/util: UtilIO.java test/UtilIOTests.java

Author: doogie
Date: Wed Feb 10 22:50:00 2010
New Revision: 908715

URL: http://svn.apache.org/viewvc?rev=908715&view=rev
Log:
Add allowJsonResolve support.

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilIO.java
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/UtilIOTests.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilIO.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilIO.java?rev=908715&r1=908714&r2=908715&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilIO.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/UtilIO.java Wed Feb 10 22:50:00 2010
@@ -271,17 +271,25 @@
     }
 
     public static Object readObject(File file) throws ClassNotFoundException, IOException {
-        return readObject(new FileInputStream(file));
+        return readObject(new FileInputStream(file), false);
+    }
+
+    public static Object readObject(File file, boolean allowJsonResolve) throws ClassNotFoundException, IOException {
+        return readObject(new FileInputStream(file), allowJsonResolve);
     }
 
     public static Object readObject(InputStream in) throws ClassNotFoundException, IOException {
+        return readObject(in, false);
+    }
+
+    public static Object readObject(InputStream in, boolean allowJsonResolve) throws ClassNotFoundException, IOException {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         IOUtils.copy(in, baos);
         in.close();
         byte[] bytes = baos.toByteArray();
         try {
             char[] buffer = StringUtils.chomp(readString(bytes)).toCharArray();
-            return parseObject(buffer, 0, buffer.length);
+            return parseObject(buffer, 0, buffer.length, allowJsonResolve);
         } catch (Exception e) {
         }
         ObjectInputStream oin = new ObjectInputStream(new ByteArrayInputStream(bytes));
@@ -291,14 +299,14 @@
     }
 
     public static Object readObject(char[] buffer) throws ClassNotFoundException, IOException {
-        return parseObject(buffer, 0, buffer.length);
+        return parseObject(buffer, 0, buffer.length, false);
     }
 
     public static Object readObject(char[] buffer, int offset, int length) throws ClassNotFoundException, IOException {
-        return parseObject(buffer, offset, length);
+        return parseObject(buffer, offset, length, false);
     }
 
-    private static Object parseObject(char[] buffer, int offset, int length) throws ClassNotFoundException, IOException {
+    private static Object parseObject(char[] buffer, int offset, int length, boolean allowJsonResolve) throws ClassNotFoundException, IOException {
         try {
             int i;
             for (i = offset; i < length && buffer[i] != ':'; i++);
@@ -314,7 +322,7 @@
         } catch (Exception e) {
         }
         try {
-            return new JSON(new StringReader(new String(buffer, offset, length))).JSONValue();
+            return new JSON(new StringReader(new String(buffer, offset, length))).allowResolve(allowJsonResolve).JSONValue();
         } catch (Error e) {
         } catch (Exception e) {
         }
@@ -322,13 +330,21 @@
     }
 
     public static void writeObject(File file, Object value) throws IOException {
-        writeObject(new FileOutputStream(file), value);
+        writeObject(new FileOutputStream(file), value, false);
+    }
+
+    public static void writeObject(File file, Object value, boolean allowJsonResolve) throws IOException {
+        writeObject(new FileOutputStream(file), value, allowJsonResolve);
     }
 
     public static void writeObject(OutputStream out, Object value) throws IOException {
+        writeObject(out, value, false);
+    }
+
+    public static void writeObject(OutputStream out, Object value, boolean allowJsonResolve) throws IOException {
         try {
             PrintWriter writer = new PrintWriter(new OutputStreamWriter(out, UTF8));
-            if (encodeObject(writer, value)) {
+            if (encodeObject(writer, value, allowJsonResolve)) {
                 writer.println();
                 writer.close();
                 return;
@@ -341,7 +357,7 @@
         out.close();
     }
 
-    private static boolean encodeObject(Writer writer, Object value) throws Exception {
+    private static boolean encodeObject(Writer writer, Object value, boolean allowJsonResolve) throws Exception {
         Converter converter = Converters.getConverter(value.getClass(), String.class);
         if (converter != null) {
             Class clz = converter.getSourceClass();
@@ -357,7 +373,12 @@
         } else {
             StringWriter sw = new StringWriter();
             IndentingWriter indenting = new IndentingWriter(writer, true, false);
-            JSONWriter jsonWriter = new JSONWriter(indenting);
+            JSONWriter jsonWriter;
+            if (allowJsonResolve) {
+                jsonWriter = new JSONWriter(indenting, JSONWriter.ResolvingFallbackHandler);
+            } else {
+                jsonWriter = new JSONWriter(indenting);
+            };
             jsonWriter.write(value);
             writer.write(sw.toString());
             return true;
@@ -365,9 +386,13 @@
     }
 
     public static void writeObject(StringBuilder sb, Object value) throws IOException {
+        writeObject(sb, value, false);
+    }
+
+    public static void writeObject(StringBuilder sb, Object value, boolean allowJsonResolve) throws IOException {
         try {
             StringWriter writer = new StringWriter();
-            if (encodeObject(writer, value)) {
+            if (encodeObject(writer, value, allowJsonResolve)) {
                 sb.append(writer.toString());
                 return;
             }

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/UtilIOTests.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/UtilIOTests.java?rev=908715&r1=908714&r2=908715&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/UtilIOTests.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/test/UtilIOTests.java Wed Feb 10 22:50:00 2010
@@ -127,6 +127,13 @@
         assertEquals("writeString UTF8:" + label, wanted, baos.toByteArray());
     }
 
+    protected void checkBasicReadObject(Object value, String text) throws Exception {
+        byte[] bytes = text.getBytes("UTF-8");
+        assertEquals("read bytes " + value.getClass().getName(), value, UtilIO.readObject(new ByteArrayInputStream(bytes)));
+        assertEquals("read chars " + value.getClass().getName(), value, UtilIO.readObject(text.toCharArray()));
+        assertEquals("read chars offset " + value.getClass().getName(), value, UtilIO.readObject(text.toCharArray(), 0, text.length()));
+    }
+
     protected void checkBasicReadWriteObject(Object value, String text) throws Exception {
         byte[] bytes = text.getBytes("UTF-8");
         assertEquals("read bytes " + value.getClass().getName(), value, UtilIO.readObject(new ByteArrayInputStream(bytes)));
@@ -152,7 +159,7 @@
         checkBasicReadWriteObject(BigDecimal.valueOf(500.5), "java.math.BigDecimal:500.5\n");
         checkBasicReadWriteObject(BigInteger.valueOf(500), "java.math.BigInteger:500\n");
         checkBasicReadWriteObject("1", "java.lang.String:1\n");
-        checkBasicReadWriteObject(Arrays.asList(new Object[] {"a", UtilMisc.toMap("b", Long.valueOf(1))}), "java.util.List:[\n \"a\",\n {\n  \"b\": 1\n }\n]\n");
+        checkBasicReadObject(Arrays.asList(new Object[] {"a", UtilMisc.toMap("b", Long.valueOf(1))}), "[\n \"a\",\n {\n  \"b\": 1\n }\n]\n");
         checkBasicReadWriteObject(MemoryType.HEAP, "java.lang.management.MemoryType:HEAP\n");
         checkBasicReadWriteObject(MemoryType.NON_HEAP, "java.lang.management.MemoryType:NON_HEAP\n");
         checkBasicReadWriteObject(UtilIO.UTF8, "java.nio.charset.Charset:UTF-8\n");