diff --git a/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java b/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
index ad5acfa..4672c98 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
@@ -13,6 +13,7 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.ConcurrentModificationException;
+import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -85,7 +86,7 @@ public class JSONSerialiser {
resetCycleBreaker();
return serialise;
}
-
+
public static void serialiseAcylicObject(Object bean, Writer writer) throws IOException {
resetCycleBreaker();
serialise(bean, writer, false);
@@ -120,8 +121,8 @@ public class JSONSerialiser {
JSONSerialiser.WRITER.append(":");
wrap(result);
} catch (Exception ignore) {
+ System.err.println("[JSONSerialiser] field exception: " + ignore);
JSONSerialiser.WRITER.append("\"").append("JSON-FIELD-EXCEPTION").append("\"");
- System.err.println("[JSON-trace] field exception: " + ignore);
}
if (it.hasNext()) {
JSONSerialiser.WRITER.append(",");
@@ -188,6 +189,11 @@ public class JSONSerialiser {
serialiseMap(map);
return;
}
+ if (object instanceof Date) {
+ Date date = (Date) object;
+ serialiseNumber(date.getTime());
+ return;
+ }
if (VISITED.stream().anyMatch((visited) -> (visited == object))) {
try {
JSONSerialiser.WRITER.append("\"").append(String.valueOf(object)).append("\"");
@@ -202,68 +208,74 @@ public class JSONSerialiser {
} catch (ConcurrentModificationException exception) {
System.err.println("[JSONSerialiser] ConcurrentModificationException");
} catch (Exception exception) {
- System.err.println("[JSON-java] serialise exception: " + exception);
- JSONSerialiser.WRITER.append("\"").append("JSON_SERIALISE_EXCEPTION").append("\"");
+ System.err.println("[JSONSerialiser] wrap exception: " + exception);
exception.printStackTrace();
+ JSONSerialiser.WRITER.append("\"").append("JSON_SERIALISE_EXCEPTION").append("\"");
}
}
private static void serialiseMap(Map map) throws IOException {
try {
- map.keySet().iterator();
- } catch (Exception ex) {
- return;
- }
- JSONSerialiser.WRITER.append("{");
- for (Iterator<?> it = map.keySet().iterator(); it.hasNext();) {
- Object key = it.next();
- if (key == null || map.get(key) == null) {
- continue;
- }
- if (!(key instanceof String)) {
- JSONSerialiser.WRITER.append("\"");
- wrap(key);
- JSONSerialiser.WRITER.append("\"");
- } else {
- wrap(key);
- }
- JSONSerialiser.WRITER.append(":");
- wrap(map.get(key));
- if (it.hasNext()) {
- JSONSerialiser.WRITER.append(",");
+ JSONSerialiser.WRITER.append("{");
+ for (Iterator<?> it = map.keySet().iterator(); it.hasNext();) {
+ Object key = it.next();
+ if (key == null || map.get(key) == null) {
+ continue;
+ }
+ if (!(key instanceof String)) {
+ JSONSerialiser.WRITER.append("\"");
+ wrap(key);
+ JSONSerialiser.WRITER.append("\"");
+ } else {
+ wrap(key);
+ }
+ JSONSerialiser.WRITER.append(":");
+ wrap(map.get(key));
+ if (it.hasNext()) {
+ JSONSerialiser.WRITER.append(",");
+ }
}
+ } catch (Exception ex) {
+ System.err.println("[JSONSerialiser] map serialise exception: " + ex);
+ } finally {
+ JSONSerialiser.WRITER.append("}");
}
- JSONSerialiser.WRITER.append("}");
}
private static void serialiseArray(Object array) throws IOException {
JSONSerialiser.WRITER.append("[");
- int length = Array.getLength(array);
- for (int i = 0; i < length;) {
- Object object = Array.get(array, i);
- wrap(object);
- if (++i < length) {
- JSONSerialiser.WRITER.append(",");
+ try {
+ int length = Array.getLength(array);
+ for (int i = 0; i < length;) {
+ Object object = Array.get(array, i);
+ wrap(object);
+ if (++i < length) {
+ JSONSerialiser.WRITER.append(",");
+ }
}
+ } catch (Exception ex) {
+ System.err.println("[JSONSerialiser] array serialise exception: " + ex);
+ } finally {
+ JSONSerialiser.WRITER.append("]");
}
- JSONSerialiser.WRITER.append("]");
}
private static void serialiseCollection(Collection collection) throws IOException {
try {
- collection.iterator();
- } catch (Exception ex) {
- return;
- }
- JSONSerialiser.WRITER.append("[");
- for (Iterator it = collection.iterator(); it.hasNext();) {
- Object object = it.next();
- wrap(object);
- if (it.hasNext()) {
- JSONSerialiser.WRITER.append(",");
+ JSONSerialiser.WRITER.append("[");
+ Iterator it = collection.iterator();
+ while (it.hasNext()) {
+ Object object = it.next();
+ wrap(object);
+ if (it.hasNext()) {
+ JSONSerialiser.WRITER.append(",");
+ }
}
+ } catch (Exception ex) {
+ System.err.println("[JSONSerialiser] collection serialise exception: " + ex);
+ } finally {
+ JSONSerialiser.WRITER.append("]");
}
- JSONSerialiser.WRITER.append("]");
}
private static void serialiseString(String string) throws IOException {
@@ -271,57 +283,62 @@ public class JSONSerialiser {
JSONSerialiser.WRITER.append("\"\"");
return;
}
-
- char b;
- char c = 0;
- String hexadecimal;
- int i;
- int len = string.length();
-
- JSONSerialiser.WRITER.append('"');
- for (i = 0; i < len; i++) {
- b = c;
- c = string.charAt(i);
- switch (c) {
- case '\\':
- case '"':
- JSONSerialiser.WRITER.append('\\');
- JSONSerialiser.WRITER.append(c);
- break;
- case '/':
- if (b == '<') {
+ try {
+ JSONSerialiser.WRITER.append('"');
+
+ char b;
+ char c = 0;
+ String hexadecimal;
+ int i;
+ int len = string.length();
+
+ for (i = 0; i < len; i++) {
+ b = c;
+ c = string.charAt(i);
+ switch (c) {
+ case '\\':
+ case '"':
JSONSerialiser.WRITER.append('\\');
- }
- JSONSerialiser.WRITER.append(c);
- break;
- case '\b':
- JSONSerialiser.WRITER.append("\\b");
- break;
- case '\t':
- JSONSerialiser.WRITER.append("\\t");
- break;
- case '\n':
- JSONSerialiser.WRITER.append("\\n");
- break;
- case '\f':
- JSONSerialiser.WRITER.append("\\f");
- break;
- case '\r':
- JSONSerialiser.WRITER.append("\\r");
- break;
- default:
- if (c < ' ' || (c >= '\u0080' && c < '\u00a0')
- || (c >= '\u2000' && c < '\u2100')) {
- JSONSerialiser.WRITER.append("\\u");
- hexadecimal = Integer.toHexString(c);
- JSONSerialiser.WRITER.append("0000", 0, 4 - hexadecimal.length());
- JSONSerialiser.WRITER.append(hexadecimal);
- } else {
JSONSerialiser.WRITER.append(c);
- }
+ break;
+ case '/':
+ if (b == '<') {
+ JSONSerialiser.WRITER.append('\\');
+ }
+ JSONSerialiser.WRITER.append(c);
+ break;
+ case '\b':
+ JSONSerialiser.WRITER.append("\\b");
+ break;
+ case '\t':
+ JSONSerialiser.WRITER.append("\\t");
+ break;
+ case '\n':
+ JSONSerialiser.WRITER.append("\\n");
+ break;
+ case '\f':
+ JSONSerialiser.WRITER.append("\\f");
+ break;
+ case '\r':
+ JSONSerialiser.WRITER.append("\\r");
+ break;
+ default:
+ if (c < ' ' || (c >= '\u0080' && c < '\u00a0')
+ || (c >= '\u2000' && c < '\u2100')) {
+ JSONSerialiser.WRITER.append("\\u");
+ hexadecimal = Integer.toHexString(c);
+ JSONSerialiser.WRITER.append("0000", 0, 4 - hexadecimal.length());
+ JSONSerialiser.WRITER.append(hexadecimal);
+ } else {
+ JSONSerialiser.WRITER.append(c);
+ }
+ }
}
+ } catch (Exception ex) {
+ System.err.println("[JSONSerialiser] string serialise exception: " + ex);
+ } finally {
+ JSONSerialiser.WRITER.append('"');
}
- JSONSerialiser.WRITER.append('"');
}
private static void serialiseNumber(Number number) throws IOException {