HTRACE-279. Fix issues where the HTracedSpanReceiver was using the wrong JSON serialization for spans and add validation to htraced REST ingest path (cmccabe)
diff --git a/htrace-htraced/go/src/org/apache/htrace/htraced/rest.go b/htrace-htraced/go/src/org/apache/htrace/htraced/rest.go
index cbfc508..c038e59 100644
--- a/htrace-htraced/go/src/org/apache/htrace/htraced/rest.go
+++ b/htrace-htraced/go/src/org/apache/htrace/htraced/rest.go
@@ -210,7 +210,12 @@
 		if span.TracerId == "" {
 			span.TracerId = msg.DefaultTrid
 		}
-		hand.store.WriteSpan(span)
+		spanIdProblem := span.Id.FindProblem()
+		if spanIdProblem != "" {
+			hand.lg.Warnf(fmt.Sprintf("Invalid span ID: %s", spanIdProblem))
+		} else {
+			hand.store.WriteSpan(span)
+		}
 	}
 }
 
diff --git a/htrace-htraced/src/main/java/org/apache/htrace/impl/RestBufferManager.java b/htrace-htraced/src/main/java/org/apache/htrace/impl/RestBufferManager.java
index 2e1aa70..377d19f 100644
--- a/htrace-htraced/src/main/java/org/apache/htrace/impl/RestBufferManager.java
+++ b/htrace-htraced/src/main/java/org/apache/htrace/impl/RestBufferManager.java
@@ -26,8 +26,6 @@
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectWriter;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -43,8 +41,6 @@
 
 class RestBufferManager implements BufferManager {
   private static final Log LOG = LogFactory.getLog(RestBufferManager.class);
-  private static ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-  private static ObjectWriter JSON_WRITER = OBJECT_MAPPER.writer();
   private static final Charset UTF8 = Charset.forName("UTF-8");
   private static final byte COMMA_BYTE = (byte)0x2c;
   private static final int MAX_PREQUEL_LENGTH = 512;
@@ -133,7 +129,7 @@
 
   @Override
   public void writeSpan(Span span) throws IOException {
-    byte[] spanJsonBytes = JSON_WRITER.writeValueAsBytes(span);
+    byte[] spanJsonBytes = span.toString().getBytes(UTF8);
     if ((spans.capacity() - spans.position()) < (spanJsonBytes.length + 1)) {
       // Make sure we have enough space for the span JSON and a comma.
       throw new IOException("Not enough space remaining in span buffer.");