You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2011/10/05 20:20:30 UTC
svn commit: r1179361 - in /avro/trunk: CHANGES.txt
lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java
lang/java/avro/src/test/java/org/apache/avro/io/TestEncoders.java
lang/java/tools/src/main/java/org/apache/avro/tool/DataFileReadTool.java
Author: cutting
Date: Wed Oct 5 18:20:30 2011
New Revision: 1179361
URL: http://svn.apache.org/viewvc?rev=1179361&view=rev
Log:
AVRO-905. Java: Change JsonEncoder to write objects on separate lines.
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestEncoders.java
avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileReadTool.java
Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1179361&r1=1179360&r2=1179361&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Wed Oct 5 18:20:30 2011
@@ -95,6 +95,9 @@ Avro 1.6.0 (unreleased)
AVRO-898. Java: Extend NettyServer to support SSL.
(Vadim Tsarik via cutting)
+ AVRO-905. Java: Change JsonEncoder to write objects on separate
+ lines. (cutting)
+
BUG FIXES
AVRO-824. Java: Fix usage message of BinaryFragmentToJsonTool.
Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java?rev=1179361&r1=1179360&r2=1179361&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java Wed Oct 5 18:20:30 2011
@@ -31,6 +31,7 @@ import org.apache.avro.util.Utf8;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.util.MinimalPrettyPrinter;
/** An {@link Encoder} for Avro's JSON data encoding.
* </p>
@@ -67,11 +68,17 @@ public class JsonEncoder extends Parsing
}
}
+ // by default, one object per line
private static JsonGenerator getJsonGenerator(OutputStream out)
throws IOException {
if (null == out)
throw new NullPointerException("OutputStream cannot be null");
- return new JsonFactory().createJsonGenerator(out, JsonEncoding.UTF8);
+ JsonGenerator g
+ = new JsonFactory().createJsonGenerator(out, JsonEncoding.UTF8);
+ MinimalPrettyPrinter pp = new MinimalPrettyPrinter();
+ pp.setRootValueSeparator(System.getProperty("line.separator"));
+ g.setPrettyPrinter(pp);
+ return g;
}
/**
Modified: avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestEncoders.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestEncoders.java?rev=1179361&r1=1179360&r2=1179361&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestEncoders.java (original)
+++ avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestEncoders.java Wed Oct 5 18:20:30 2011
@@ -25,6 +25,7 @@ import org.apache.avro.AvroTypeException
import org.apache.avro.Schema;
import org.apache.avro.Schema.Type;
import org.apache.avro.generic.GenericDatumReader;
+import org.apache.avro.generic.GenericDatumWriter;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
@@ -93,6 +94,19 @@ public class TestEncoders {
}
@Test
+ public void testJsonEncoderNewlineDelimited() throws IOException {
+ OutputStream out = new ByteArrayOutputStream();
+ Schema ints = Schema.create(Type.INT);
+ Encoder e = factory.jsonEncoder(ints, out);
+ String separator = System.getProperty("line.separator");
+ GenericDatumWriter<Integer> writer = new GenericDatumWriter<Integer>(ints);
+ writer.write(1, e);
+ writer.write(2, e);
+ e.flush();
+ Assert.assertEquals("1"+separator+"2", out.toString());
+ }
+
+ @Test
public void testValidatingEncoderInit() throws IOException {
Schema s = Schema.parse("\"int\"");
OutputStream out = new ByteArrayOutputStream();
Modified: avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileReadTool.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileReadTool.java?rev=1179361&r1=1179360&r2=1179361&view=diff
==============================================================================
--- avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileReadTool.java (original)
+++ avro/trunk/lang/java/tools/src/main/java/org/apache/avro/tool/DataFileReadTool.java Wed Oct 5 18:20:30 2011
@@ -61,12 +61,10 @@ public class DataFileReadTool implements
Schema schema = fileReader.getSchema();
DatumWriter<Object> writer = new GenericDatumWriter<Object>(schema);
JsonEncoder encoder = EncoderFactory.get().jsonEncoder(schema, out);
- for (Object datum : fileReader) {
- encoder.configure(out); //reinitializes state
+ for (Object datum : fileReader)
writer.write(datum, encoder);
- encoder.flush();
- out.println();
- }
+ encoder.flush();
+ out.println();
out.flush();
} finally {
fileReader.close();