json-serialiser

avoid loop in singletons, changed exception messages, added

11/27/2018 2:07:01 PM

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 a7ad54b..2a1f2e8 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
@@ -109,6 +109,9 @@ public class JSONSerialiser {
 
     private List<Field> getAllFields(List<Field> fields, Class<?> type) {
         for (Field field : type.getDeclaredFields()) {
+            if (fields.contains(field)) {
+                continue;
+            }
             if (!field.getName().startsWith("ajc$tjp_")) {
                 fields.add(field);
             }
@@ -165,6 +168,24 @@ public class JSONSerialiser {
                 this.writer.append("\"").append(String.valueOf(date.getTime())).append("\"");
                 return;
             }
+            String serialiseInternals = System.getenv("TRACER_SERIALISE_INTERNALS");
+            if (serialiseInternals == null) {
+                serialiseInternals = "true";
+            }
+            if (serialiseInternals.equals("false")) {
+                Package objectPackage = object.getClass().getPackage();
+                String objectPackageName = objectPackage != null ? objectPackage.getName() : "";
+                if (objectPackageName.startsWith("java.")
+                        || objectPackageName.startsWith("javax.")
+                        || objectPackageName.startsWith("org.ietf.")
+                        || objectPackageName.startsWith("org.omg.")
+                        || objectPackageName.startsWith("org.w3c.")
+                        || objectPackageName.startsWith("org.xml.")
+                        || object.getClass().getClassLoader() == null) {
+                    this.writer.append("\"").append(String.valueOf(object)).append("\"");
+                    return;
+                }
+            }
             if (visited.stream().anyMatch((visited) -> (visited == object))) {
                 try {
                     this.writer.append("{\"r\":\"").append(object.getClass().getName() + "@" + object.hashCode()).append("\"}");
@@ -178,10 +199,11 @@ public class JSONSerialiser {
             serialiseBean(object);
         } catch (ConcurrentModificationException exception) {
             System.err.println("[JSONSerialiser] ConcurrentModificationException");
+            this.writer.append("{\"e\":\"JSON_CONCURRENT_MODIFICATION\"}");
         } catch (Exception exception) {
             System.err.println("[JSONSerialiser] wrap exception: " + exception);
             exception.printStackTrace();
-            this.writer.append("\"").append("JSON_SERIALISE_EXCEPTION").append("\"");
+            this.writer.append("{\"e\":\"JSON_SERIALISE_EXCEPTION\"}");
         }
     }