|
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"); |
| Free forum by Nabble | Edit this page |
