json-serialiser

Details

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 {