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 2a1f2e8..a01e72c 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
@@ -9,7 +9,10 @@ import java.io.IOException;
import java.io.Writer;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Date;
@@ -175,18 +178,27 @@ public class JSONSerialiser {
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;
+
+ String ignoredPackagesPath = System.getenv("TRACER_IGNORED_PACKAGES");
+ if (ignoredPackagesPath == null) {
+ ignoredPackagesPath = "./ignored";
+ }
+ List<String> ignoredPackages;
+ try {
+ ignoredPackages = Files.readAllLines(Paths.get(ignoredPackagesPath));
+ } catch (IOException ex) {
+ ignoredPackages = new ArrayList<>();
+ }
+ String[] internals = {"java.", "org.ietf.", "org.omg.", "org.w3c.", "org.xml."};
+ ignoredPackages.addAll(Arrays.asList(internals));
+ for (String ignoredPackage : ignoredPackages) {
+ if (objectPackageName.startsWith(ignoredPackage)) {
+ this.writer.append("\"").append(String.valueOf(object)).append("\"");
+ return;
+ }
}
}
- if (visited.stream().anyMatch((visited) -> (visited == object))) {
+ if (visited.stream().parallel().anyMatch((visited) -> (visited == object))) {
try {
this.writer.append("{\"r\":\"").append(object.getClass().getName() + "@" + object.hashCode()).append("\"}");
} catch (Exception e) {