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");