[tor-commits] [collector/master] Replace Gson with Jackson.

karsten at torproject.org karsten at torproject.org
Fri May 25 12:52:22 UTC 2018


commit 818488836545aaa08bb8ef90e4a2b1d5accf535b
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Tue May 22 15:31:41 2018 +0200

    Replace Gson with Jackson.
    
    Implements #26162.
---
 CHANGELOG.md                                       |  3 ++-
 build.xml                                          |  6 ++++--
 .../collector/index/CreateIndexJson.java           |  7 +------
 .../collector/relaydescs/ReferenceChecker.java     | 22 +++++++++++-----------
 .../collector/relaydescs/ReferenceCheckerTest.java | 21 +++++++++++++++++++++
 5 files changed, 39 insertions(+), 20 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index d9cf7da..9c6cb85 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,8 @@
 # Changes in version 1.6.0 - 2018-0?-??
 
  * Medium changes
-   - Update and adapt to metrics-lib 2.3.0.
+   - Update and adapt to metrics-lib 2.4.0.
+   - Replace Gson with Jackson.
 
 
 # Changes in version 1.5.1 - 2018-03-19
diff --git a/build.xml b/build.xml
index 921ad33..39a46e9 100644
--- a/build.xml
+++ b/build.xml
@@ -11,13 +11,15 @@
   <property name="release.version" value="1.5.1-dev" />
   <property name="project-main-class" value="org.torproject.collector.Main" />
   <property name="name" value="collector"/>
-  <property name="metricslibversion" value="2.3.0" />
+  <property name="metricslibversion" value="2.4.0" />
   <property name="jarincludes" value="collector.properties logback.xml" />
 
   <patternset id="runtime" >
       <include name="commons-codec-1.10.jar"/>
       <include name="commons-compress-1.13.jar"/>
-      <include name="gson-2.4.jar"/>
+      <include name="jackson-annotations-2.8.6.jar"/>
+      <include name="jackson-core-2.8.6.jar"/>
+      <include name="jackson-databind-2.8.6.jar"/>
       <include name="xz-1.6.jar"/>
       <include name="metrics-lib-${metricslibversion}.jar"/>
       <include name="logback-core-1.1.9.jar" />
diff --git a/src/main/java/org/torproject/collector/index/CreateIndexJson.java b/src/main/java/org/torproject/collector/index/CreateIndexJson.java
index 49bfb11..5f030eb 100644
--- a/src/main/java/org/torproject/collector/index/CreateIndexJson.java
+++ b/src/main/java/org/torproject/collector/index/CreateIndexJson.java
@@ -12,9 +12,6 @@ import org.torproject.descriptor.index.FileNode;
 import org.torproject.descriptor.index.IndexNode;
 import org.torproject.descriptor.internal.FileType;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -164,9 +161,7 @@ public class CreateIndexJson extends CollecTorMain {
 
   private void writeIndex(IndexNode indexNode) throws Exception {
     indexJsonFile.getParentFile().mkdirs();
-    Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation()
-        .create();
-    String indexNodeString = gson.toJson(indexNode);
+    String indexNodeString = IndexNode.makeJsonString(indexNode);
     for (String filename : new String[] {indexJsonFile.toString(),
         indexJsonFile + ".gz", indexJsonFile + ".xz", indexJsonFile + ".bz2"}) {
       FileType type = FileType.valueOf(
diff --git a/src/main/java/org/torproject/collector/relaydescs/ReferenceChecker.java b/src/main/java/org/torproject/collector/relaydescs/ReferenceChecker.java
index 43706dd..df0508a 100644
--- a/src/main/java/org/torproject/collector/relaydescs/ReferenceChecker.java
+++ b/src/main/java/org/torproject/collector/relaydescs/ReferenceChecker.java
@@ -14,14 +14,14 @@ import org.torproject.descriptor.RelayNetworkStatusConsensus;
 import org.torproject.descriptor.RelayNetworkStatusVote;
 import org.torproject.descriptor.ServerDescriptor;
 
-import com.google.gson.Gson;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.text.DateFormat;
@@ -50,6 +50,10 @@ public class ReferenceChecker {
 
   private SortedSet<Reference> references = new TreeSet<>();
 
+  private static ObjectMapper objectMapper = new ObjectMapper()
+      .setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE)
+      .setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
+
   private static DateFormat dateTimeFormat;
 
   static {
@@ -141,10 +145,9 @@ public class ReferenceChecker {
     if (!this.referencesFile.exists()) {
       return;
     }
-    Gson gson = new Gson();
-    try (FileReader fr = new FileReader(this.referencesFile)) {
-      this.references.addAll(Arrays.asList(gson.fromJson(fr,
-          Reference[].class)));
+    try {
+      this.references.addAll(Arrays.asList(objectMapper.readValue(
+          this.referencesFile, Reference[].class)));
     } catch (IOException e) {
       logger.warn("Cannot read existing references file "
           + "from previous run.", e);
@@ -321,11 +324,8 @@ public class ReferenceChecker {
   }
 
   private void writeReferencesFile() {
-    Gson gson = new Gson();
     try {
-      FileWriter fw = new FileWriter(this.referencesFile);
-      gson.toJson(this.references, fw);
-      fw.close();
+      objectMapper.writeValue(this.referencesFile, this.references);
     } catch (IOException e) {
       logger.warn("Cannot write references file for next "
           + "run.", e);
diff --git a/src/test/java/org/torproject/collector/relaydescs/ReferenceCheckerTest.java b/src/test/java/org/torproject/collector/relaydescs/ReferenceCheckerTest.java
index adb0b48..da2d9ad 100644
--- a/src/test/java/org/torproject/collector/relaydescs/ReferenceCheckerTest.java
+++ b/src/test/java/org/torproject/collector/relaydescs/ReferenceCheckerTest.java
@@ -74,5 +74,26 @@ public class ReferenceCheckerTest {
             .get(0));
   }
 
+  @Test()
+  public void testEmptyReferencedString() throws Exception {
+    String validEmptyReferencedString
+        = validReferenceJson.substring(0,
+        validReferenceJson.indexOf("S-D8736"))
+        + validReferenceJson.substring(
+        validReferenceJson.indexOf("\",\"weight"));
+    File descDir = tmpf.newFolder();
+    File refsFile = tmpf.newFile();
+    File histFile = tmpf.newFile();
+    Files.write(refsFile.toPath(), validEmptyReferencedString.getBytes());
+    assertEquals(validEmptyReferencedString,
+        Files.readAllLines(refsFile.toPath(),
+        Charset.forName("US-ASCII")).get(0));
+    ReferenceChecker rc = new ReferenceChecker(descDir, refsFile, histFile);
+    rc.check();
+    assertTrue(refsFile.exists());
+    assertEquals(validEmptyReferencedString,
+        Files.readAllLines(refsFile.toPath(),
+        Charset.forName("US-ASCII")).get(0));
+  }
 }
 





More information about the tor-commits mailing list