HTRACE-148. Add deserialization utility method to MilliSpan for testing outside of htrace-core (iwasakims)
diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java b/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
index c57eb25..c688858 100644
--- a/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
+++ b/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java
@@ -21,12 +21,13 @@
 import com.fasterxml.jackson.databind.DeserializationContext;
 import com.fasterxml.jackson.databind.JsonDeserializer;
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectReader;
 import com.fasterxml.jackson.databind.ObjectWriter;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import org.apache.htrace.Span;
 import org.apache.htrace.TimelineAnnotation;
 import org.apache.htrace.Tracer;
-import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.io.IOException;
 import java.io.StringWriter;
@@ -47,7 +48,9 @@
  */
 @JsonDeserialize(using = MilliSpan.MilliSpanDeserializer.class)
 public class MilliSpan implements Span {
-  private static ObjectWriter JSON_WRITER = new ObjectMapper().writer();
+  private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+  private static ObjectReader JSON_READER = OBJECT_MAPPER.reader(MilliSpan.class);
+  private static ObjectWriter JSON_WRITER = OBJECT_MAPPER.writer();
   private static final long EMPTY_PARENT_ARRAY[] = new long[0];
   private static final String EMPTY_STRING = "";
 
@@ -384,4 +387,8 @@
       return builder.build();
     }
   }
+
+  static MilliSpan fromJson(String json) throws IOException {
+    return JSON_READER.readValue(json);
+  }
 }
diff --git a/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java b/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
index 41ee108..2e0edde 100644
--- a/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
+++ b/htrace-core/src/test/java/org/apache/htrace/impl/TestMilliSpan.java
@@ -16,8 +16,6 @@
  */
 package org.apache.htrace.impl;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -81,8 +79,7 @@
         spanId(989L).
         traceId(444).build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 
@@ -97,8 +94,7 @@
         spanId(-1L).
         traceId(-1L).build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 
@@ -114,8 +110,7 @@
         spanId(random.nextLong()).
         traceId(random.nextLong()).build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 
@@ -140,8 +135,7 @@
     builder.timeline(timeline);
     MilliSpan span = builder.build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 
@@ -149,8 +143,7 @@
   public void testJsonSerializationWithFieldsNotSet() throws Exception {
     MilliSpan span = new MilliSpan.Builder().build();
     String json = span.toJson();
-    ObjectMapper mapper = new ObjectMapper();
-    MilliSpan dspan = mapper.readValue(json, MilliSpan.class);
+    MilliSpan dspan = MilliSpan.fromJson(json);
     compareSpans(span, dspan);
   }
 }
diff --git a/htrace-htraced/src/test/java/org/apache/htrace/impl/TestHTracedRESTReceiver.java b/htrace-htraced/src/test/java/org/apache/htrace/impl/TestHTracedRESTReceiver.java
index 9a01005..a6faa02 100644
--- a/htrace-htraced/src/test/java/org/apache/htrace/impl/TestHTracedRESTReceiver.java
+++ b/htrace-htraced/src/test/java/org/apache/htrace/impl/TestHTracedRESTReceiver.java
@@ -24,7 +24,6 @@
 import java.io.File;
 import java.net.URL;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.htrace.HTraceConfiguration;
@@ -160,8 +159,7 @@
                 return false;
               }
               LOG.info("Got " + content + " for span " + i);
-              ObjectMapper mapper = new ObjectMapper();
-              MilliSpan dspan = mapper.readValue(content, MilliSpan.class);
+              MilliSpan dspan = MilliSpan.fromJson(content);
               assertEquals((long)i, dspan.getSpanId());
               // Every span should have the process ID we set in the
               // configuration... except for the last span, which had