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/03/07 21:12:47 UTC

svn commit: r1078917 - in /avro/trunk: CHANGES.txt lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumWriter.java

Author: cutting
Date: Mon Mar  7 20:12:47 2011
New Revision: 1078917

URL: http://svn.apache.org/viewvc?rev=1078917&view=rev
Log:
AVRO-726. Java: Make GenericDatum{Reader,Writer} easier to extend.  Contributed by scottcarey.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumWriter.java

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1078917&r1=1078916&r2=1078917&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Mon Mar  7 20:12:47 2011
@@ -159,6 +159,9 @@ Avro 1.5.0 (4 March 2011)
     AVRO-771. Java: Update dependency versions
     (scottcarey)
 
+    AVRO-726. Java: Make GenericDatum{Reader,Writer} easier to extend.
+    (scottcarey)
+
     AVRO-765. Java: Improvement to BinaryDecoder readLong performance
     (scottcarey)
   

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java?rev=1078917&r1=1078916&r2=1078917&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java Mon Mar  7 20:12:47 2011
@@ -35,7 +35,7 @@ import org.apache.avro.util.WeakIdentity
 
 /** {@link DatumReader} for generic Java objects. */
 public class GenericDatumReader<D> implements DatumReader<D> {
-  private GenericData data;
+  private final GenericData data;
   private Schema actual;
   private Schema expected;
   
@@ -63,6 +63,9 @@ public class GenericDatumReader<D> imple
     this.creator = Thread.currentThread();
   }
 
+  /** Return the {@link GenericData} implementation. */
+  public GenericData getData() { return data; }
+
   @Override
   public void setSchema(Schema writer) {
     this.actual = writer;
@@ -86,7 +89,12 @@ public class GenericDatumReader<D> imple
     }
   };
 
-  private ResolvingDecoder getResolver(Schema actual, Schema expected)
+  /** Gets a resolving decoder for use by this GenericDatumReader.
+   *  Unstable API.
+   *  Currently uses a thread local cache to prevent constructing the
+   *  resolvers too often, because that is very expensive.
+   */
+  protected final ResolvingDecoder getResolver(Schema actual, Schema expected)
     throws IOException {
     Thread currThread = Thread.currentThread();
     ResolvingDecoder resolver;

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumWriter.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumWriter.java?rev=1078917&r1=1078916&r2=1078917&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumWriter.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumWriter.java Mon Mar  7 20:12:47 2011
@@ -48,6 +48,9 @@ public class GenericDatumWriter<D> imple
     setSchema(root);
   }
 
+  /** Return the {@link GenericData} implementation. */
+  public GenericData getData() { return data; }
+
   public void setSchema(Schema root) { this.root = root; }
 
   public void write(D datum, Encoder out) throws IOException {
@@ -84,7 +87,8 @@ public class GenericDatumWriter<D> imple
     }
   }
 
-  private NullPointerException npe(NullPointerException e, String s) {
+  /** Helper method for adding a message to an NPE. */
+  protected NullPointerException npe(NullPointerException e, String s) {
     NullPointerException result = new NullPointerException(e.getMessage()+s);
     result.initCause(e.getCause() == null ? e : e.getCause());
     return result;