Author: cutting
Date: Thu Feb 24 22:20:32 2011
New Revision: 1074319

URL: http://svn.apache.org/viewvc?rev=1074319&view=rev
Log:
AVRO-246. Java: Fix union dispatch to consider full schema name for records, 
enums and fixed.

Removed:
    
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/compiler/specific/Avro14SpecificCompiler.java
    
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/compiler/specific/TestTemplatedCompilerFidelity.java
Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java
    
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
    
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
    
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericEnumSymbol.java
    
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericFixed.java
    
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
    
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java
    
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectDatumWriter.java
    
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
    
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificFixed.java
    avro/trunk/lang/java/avro/src/test/java/org/apache/avro/RandomData.java
    
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
    
avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/enum.vm
    
avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/fixed.vm
    avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/RandomData.java
    avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestCompare.java
    
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolGeneric.java
    avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
    
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificDatumWriter.java

Modified: avro/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Thu Feb 24 22:20:32 2011
@@ -69,6 +69,11 @@ Avro 1.5.0 (unreleased)
     AVRO-741. C: Minor API change to handling of bytes data.
     (Douglas Creager via brucem)
 
+    AVRO-246. Java: Add required Schema parameter to GenericData.Fixed
+    and GenericData.EnumSymbol constructors.  Also fix union dispatch
+    to conform to specification, using full schema name for records,
+    enums and fixed.
+
   NEW FEATURES
 
     AVRO-684. Java: Add command-line "recodec" tool to change file

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java 
(original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/Schema.java Thu Feb 
24 22:20:32 2011
@@ -266,9 +266,9 @@ public abstract class Schema {
   }
 
   /** If this is a record, enum or fixed, returns its namespace-qualified name,
-   * if any. */
+   * otherwise returns the name of the primitive type. */
   public String getFullName() {
-    throw new AvroRuntimeException("Not a named type: "+this);
+    return getName();
   }
 
   /** If this is a record, enum or fixed, add an alias. */

Modified: 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
 (original)
+++ 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
 Thu Feb 24 22:20:32 2011
@@ -188,12 +188,25 @@ public class GenericData {
 
   /** Default implementation of {@link GenericFixed}. */
   public static class Fixed implements GenericFixed, Comparable<Fixed> {
+    private Schema schema;
     private byte[] bytes;
 
-    public Fixed(Schema schema) { bytes(new byte[schema.getFixedSize()]); }
-    public Fixed(byte[] bytes) { bytes(bytes); }
+    public Fixed(Schema schema) { setSchema(schema); }
+
+    public Fixed(Schema schema, byte[] bytes) {
+      this.schema = schema;
+      this.bytes = bytes;
+    }
 
     protected Fixed() {}
+
+    protected void setSchema(Schema schema) {
+      this.schema = schema;
+      this.bytes = new byte[schema.getFixedSize()];
+    }
+
+    @Override public Schema getSchema() { return schema; }
+
     public void bytes(byte[] bytes) { this.bytes = bytes; }
 
     public byte[] bytes() { return bytes; }
@@ -219,8 +232,15 @@ public class GenericData {
 
   /** Default implementation of {@link GenericEnumSymbol}. */
   public static class EnumSymbol implements GenericEnumSymbol {
+    private Schema schema;
     private String symbol;
-    public EnumSymbol(String symbol) { this.symbol = symbol; }
+
+    public EnumSymbol(Schema schema, String symbol) {
+      this.schema = schema;
+      this.symbol = symbol;
+    }
+
+    @Override public Schema getSchema() { return schema; }
 
     @Override
     public boolean equals(Object o) {
@@ -468,12 +488,17 @@ public class GenericData {
     switch (schema.getType()) {
     case RECORD:
       if (!isRecord(datum)) return false;
-      return (schema.getName() == null) ||
-        schema.getName().equals(getRecordSchema(datum).getName());
-    case ENUM:    return isEnum(datum);
+      return (schema.getFullName() == null)
+        ? getRecordSchema(datum).getFullName() == null
+        : schema.getFullName().equals(getRecordSchema(datum).getFullName());
+    case ENUM:
+      if (!isEnum(datum)) return false;
+      return schema.getFullName().equals(getEnumSchema(datum).getFullName());
     case ARRAY:   return isArray(datum);
     case MAP:     return isMap(datum);
-    case FIXED:   return isFixed(datum);
+    case FIXED:
+      if (!isFixed(datum)) return false;
+      return schema.getFullName().equals(getFixedSchema(datum).getFullName());
     case STRING:  return isString(datum);
     case BYTES:   return isBytes(datum);
     case INT:     return datum instanceof Integer;
@@ -508,6 +533,13 @@ public class GenericData {
     return datum instanceof GenericEnumSymbol;
   }
   
+  /** Called to obtain the schema of a enum.  By default calls
+   * {GenericContainer#getSchema().  May be overridden for alternate enum
+   * representations. */
+  protected Schema getEnumSchema(Object enu) {
+    return ((GenericContainer)enu).getSchema();
+  }
+
   /** Called by the default implementation of {@link #instanceOf}.*/
   protected boolean isMap(Object datum) {
     return datum instanceof Map;
@@ -518,6 +550,13 @@ public class GenericData {
     return datum instanceof GenericFixed;
   }
 
+  /** Called to obtain the schema of a fixed.  By default calls
+   * {GenericContainer#getSchema().  May be overridden for alternate fixed
+   * representations. */
+  protected Schema getFixedSchema(Object fixed) {
+    return ((GenericContainer)fixed).getSchema();
+  }
+
   /** Called by the default implementation of {@link #instanceOf}.*/
   protected boolean isString(Object datum) {
     return datum instanceof CharSequence;

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=1074319&r1=1074318&r2=1074319&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
 Thu Feb 24 22:20:32 2011
@@ -168,7 +168,7 @@ public class GenericDatumReader<D> imple
   /** Called to create an enum value. May be overridden for alternate enum
    * representations.  By default, returns a GenericEnumSymbol. */
   protected Object createEnum(String symbol, Schema schema) {
-    return new GenericData.EnumSymbol(symbol);
+    return new GenericData.EnumSymbol(schema, symbol);
   }
 
   /** Called to read an array instance.  May be overridden for alternate array

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=1074319&r1=1074318&r2=1074319&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
 Thu Feb 24 22:20:32 2011
@@ -80,7 +80,7 @@ public class GenericDatumWriter<D> imple
       default: error(schema,datum);
       }
     } catch (NullPointerException e) {
-      throw npe(e, " of "+schema.getName());
+      throw npe(e, " of "+schema.getFullName());
     }
   }
 

Modified: 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericEnumSymbol.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericEnumSymbol.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericEnumSymbol.java
 (original)
+++ 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericEnumSymbol.java
 Thu Feb 24 22:20:32 2011
@@ -18,7 +18,7 @@
 package org.apache.avro.generic;
 
 /** An enum symbol. */
-public interface GenericEnumSymbol {
+public interface GenericEnumSymbol extends GenericContainer {
   /** Return the symbol. */
   String toString();
 }

Modified: 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericFixed.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericFixed.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericFixed.java
 (original)
+++ 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/generic/GenericFixed.java
 Thu Feb 24 22:20:32 2011
@@ -18,7 +18,7 @@
 package org.apache.avro.generic;
 
 /** Fixed-size data. */
-public interface GenericFixed {
+public interface GenericFixed extends GenericContainer {
   /** Return the data. */
   byte[] bytes();
 }

Modified: 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
 (original)
+++ 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
 Thu Feb 24 22:20:32 2011
@@ -88,7 +88,7 @@ public class ResolvingGrammarGenerator e
       case BYTES:
         return Symbol.BYTES;
       case FIXED:
-        if (writer.getName().equals(reader.getName())
+        if (writer.getFullName().equals(reader.getFullName())
             && writer.getFixedSize() == reader.getFixedSize()) {
           return Symbol.seq(new Symbol.IntCheckAction(writer.getFixedSize()),
               Symbol.FIXED);
@@ -96,8 +96,8 @@ public class ResolvingGrammarGenerator e
         break;
 
       case ENUM:
-        if (writer.getName() == null
-                || writer.getName().equals(reader.getName())) {
+        if (writer.getFullName() == null
+                || writer.getFullName().equals(reader.getFullName())) {
           return Symbol.seq(mkEnumAdjust(writer.getEnumSymbols(),
                   reader.getEnumSymbols()), Symbol.ENUM);
         }
@@ -190,7 +190,7 @@ public class ResolvingGrammarGenerator e
     int i = 0;
     for (Schema w : alts) {
       symbols[i] = generate(w, reader, seen);
-      labels[i] = w.getName();
+      labels[i] = w.getFullName();
       i++;
     }
     return Symbol.seq(Symbol.alt(symbols, labels),
@@ -416,9 +416,12 @@ public class ResolvingGrammarGenerator e
       int j = 0;
       for (Schema b : r.getTypes()) {
         if (vt == b.getType())
-          if (vt == Schema.Type.RECORD) {
-            String vname = w.getName();
-            if (vname == null || vname.equals(b.getName()))
+          if (vt == Schema.Type.RECORD || vt == Schema.Type.ENUM || 
+              vt == Schema.Type.FIXED) {
+            String vname = w.getFullName();
+            String bname = b.getFullName();
+            if ((vname != null && vname.equals(bname))
+                || vname == bname && vt == Schema.Type.RECORD)
               return j;
           } else
             return j;

Modified: 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java
 (original)
+++ 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ValidatingGrammarGenerator.java
 Thu Feb 24 22:20:32 2011
@@ -105,7 +105,7 @@ public class ValidatingGrammarGenerator 
       int i = 0;
       for (Schema b : sc.getTypes()) {
         symbols[i] = generate(b, seen);
-        labels[i] = b.getName();
+        labels[i] = b.getFullName();
         i++;
       }
       return Symbol.seq(Symbol.alt(symbols, labels), Symbol.UNION);

Modified: 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectDatumWriter.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectDatumWriter.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectDatumWriter.java
 (original)
+++ 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectDatumWriter.java
 Thu Feb 24 22:20:32 2011
@@ -102,7 +102,7 @@ public class ReflectDatumWriter<T> exten
       super.write(schema, datum, out);
     } catch (NullPointerException e) {            // improve error message
       NullPointerException result =
-        new NullPointerException("in "+schema.getName()+" "+e.getMessage());
+        new NullPointerException("in "+schema.getFullName()+" 
"+e.getMessage());
       result.initCause(e);
       throw result;
     }

Modified: 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
 (original)
+++ 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
 Thu Feb 24 22:20:32 2011
@@ -48,6 +48,13 @@ public class SpecificData extends Generi
     return datum instanceof Enum || super.isEnum(datum);
   }
 
+  @Override
+  protected Schema getEnumSchema(Object datum) {
+    return (datum instanceof Enum)
+      ? getSchema(datum.getClass())
+      : super.getEnumSchema(datum);
+  }
+
   private Map<String,Class> classCache = new ConcurrentHashMap<String,Class>();
 
   private static final Class NO_CLASS = new Object(){}.getClass();

Modified: 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificFixed.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificFixed.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificFixed.java
 (original)
+++ 
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificFixed.java
 Thu Feb 24 22:20:32 2011
@@ -22,7 +22,7 @@ import org.apache.avro.generic.GenericDa
 /** Base class for generated fixed-sized data classes. */
 public abstract class SpecificFixed extends GenericData.Fixed {
   public SpecificFixed() {
-    bytes(new byte[getClass().getAnnotation(FixedSize.class).value()]);
+    setSchema(SpecificData.get().getSchema(getClass()));
   }
 }
 

Modified: 
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/RandomData.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/RandomData.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/test/java/org/apache/avro/RandomData.java 
(original)
+++ avro/trunk/lang/java/avro/src/test/java/org/apache/avro/RandomData.java Thu 
Feb 24 22:20:32 2011
@@ -71,7 +71,8 @@ public class RandomData implements Itera
       return record;
     case ENUM:
       List<String> symbols = schema.getEnumSymbols();
-      return new 
GenericData.EnumSymbol(symbols.get(random.nextInt(symbols.size())));
+      return new GenericData.EnumSymbol
+        (schema, symbols.get(random.nextInt(symbols.size())));
     case ARRAY:
       int length = (random.nextInt(5)+2)-d;
       GenericArray<Object> array =
@@ -93,7 +94,7 @@ public class RandomData implements Itera
     case FIXED:
       byte[] bytes = new byte[schema.getFixedSize()];
       random.nextBytes(bytes);
-      return new GenericData.Fixed(bytes);
+      return new GenericData.Fixed(schema, bytes);
     case STRING:  return randomUtf8(random, 40);
     case BYTES:   return randomBytes(random, 40);
     case INT:     return random.nextInt();

Modified: 
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
 (original)
+++ 
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java
 Thu Feb 24 22:20:32 2011
@@ -218,7 +218,7 @@ public class TestGenericData {
     
     GenericRecord r = new GenericData.Record(schema);
     r.put(stringField.name(), "hello\nthere\"\tyou}");
-    r.put(enumField.name(), new GenericData.EnumSymbol("a"));
+    r.put(enumField.name(), new 
GenericData.EnumSymbol(enumField.schema(),"a"));
     
     String json = r.toString();
     JsonFactory factory = new JsonFactory();

Modified: 
avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/enum.vm
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/enum.vm?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/enum.vm
 (original)
+++ 
avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/enum.vm
 Thu Feb 24 22:20:32 2011
@@ -24,5 +24,6 @@ package $schema.getNamespace();  
 #end
 public enum ${this.mangle($schema.getName())} { 
   #foreach ($symbol in ${schema.getEnumSymbols()})${this.mangle($symbol)}#if 
($velocityHasNext), #end#end
-
+  ;
+  public static final org.apache.avro.Schema SCHEMA$ = 
org.apache.avro.Schema.parse("${this.javaEscape($schema.toString())}");
 }

Modified: 
avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/fixed.vm
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/fixed.vm?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/fixed.vm
 (original)
+++ 
avro/trunk/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/fixed.vm
 Thu Feb 24 22:20:32 2011
@@ -23,4 +23,6 @@ package $schema.getNamespace();  
 /** $schema.getDoc() */
 #end
 @org.apache.avro.specific.FixedSize($schema.getFixedSize())
-public class ${this.mangle($schema.getName())} extends 
org.apache.avro.specific.SpecificFixed {}
+public class ${this.mangle($schema.getName())} extends 
org.apache.avro.specific.SpecificFixed {
+  public static final org.apache.avro.Schema SCHEMA$ = 
org.apache.avro.Schema.parse("${this.javaEscape($schema.toString())}");
+}

Modified: avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/RandomData.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/RandomData.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/RandomData.java 
(original)
+++ avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/RandomData.java Thu 
Feb 24 22:20:32 2011
@@ -71,7 +71,8 @@ public class RandomData implements Itera
       return record;
     case ENUM:
       List<String> symbols = schema.getEnumSymbols();
-      return new 
GenericData.EnumSymbol(symbols.get(random.nextInt(symbols.size())));
+      return new GenericData.EnumSymbol
+        (schema, symbols.get(random.nextInt(symbols.size())));
     case ARRAY:
       int length = (random.nextInt(5)+2)-d;
       GenericArray<Object> array =
@@ -93,7 +94,7 @@ public class RandomData implements Itera
     case FIXED:
       byte[] bytes = new byte[schema.getFixedSize()];
       random.nextBytes(bytes);
-      return new GenericData.Fixed(bytes);
+      return new GenericData.Fixed(schema, bytes);
     case STRING:  return randomUtf8(random, 40);
     case BYTES:   return randomBytes(random, 40);
     case INT:     return random.nextInt();

Modified: 
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestCompare.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestCompare.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestCompare.java 
(original)
+++ avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestCompare.java Thu 
Feb 24 22:20:32 2011
@@ -148,9 +148,11 @@ public class TestCompare {
 
   @Test
   public void testFixed() throws Exception {
-    check("{\"type\": \"fixed\", \"name\":\"Test\", \"size\": 1}",
-          new GenericData.Fixed(new byte[]{(byte)'a'}),
-          new GenericData.Fixed(new byte[]{(byte)'b'}));
+    String json = "{\"type\": \"fixed\", \"name\":\"Test\", \"size\": 1}";
+    Schema schema = Schema.parse(json);
+    check(json,
+          new GenericData.Fixed(schema, new byte[]{(byte)'a'}),
+          new GenericData.Fixed(schema, new byte[]{(byte)'b'}));
   }
 
   @Test

Modified: 
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolGeneric.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolGeneric.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolGeneric.java 
(original)
+++ 
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestProtocolGeneric.java 
Thu Feb 24 22:20:32 2011
@@ -123,9 +123,11 @@ public class TestProtocolGeneric {
     GenericRecord record =
       new GenericData.Record(PROTOCOL.getType("TestRecord"));
     record.put("name", new Utf8("foo"));
-    record.put("kind", new GenericData.EnumSymbol("BAR"));
+    record.put("kind", new GenericData.EnumSymbol
+               (PROTOCOL.getType("Kind"), "BAR"));
     record.put("hash", new GenericData.Fixed
-               (new byte[]{0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5}));
+               (PROTOCOL.getType("MD5"),
+                new byte[]{0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5}));
     GenericRecord params =
       new GenericData.Record(PROTOCOL.getMessages().get("echo").getRequest());
     params.put("record", record);

Modified: avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java 
(original)
+++ avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java Thu 
Feb 24 22:20:32 2011
@@ -202,7 +202,9 @@ public class TestSchema {
 
   @Test
   public void testEnum() throws Exception {
-    check(BASIC_ENUM_SCHEMA, "\"B\"", new GenericData.EnumSymbol("B"), false);
+    check(BASIC_ENUM_SCHEMA, "\"B\"",
+          new GenericData.EnumSymbol(Schema.parse(BASIC_ENUM_SCHEMA), "B"),
+          false);
     checkParseError("{\"type\":\"enum\"}");        // symbols required
     checkParseError("{\"type\":\"enum\",\"symbols\": [\"X\"]}"); // name reqd
     // check no duplicate symbols
@@ -215,8 +217,10 @@ public class TestSchema {
 
   @Test
   public void testFixed() throws Exception {
-    check("{\"type\": \"fixed\", \"name\":\"Test\", \"size\": 1}", "\"a\"",
-          new GenericData.Fixed(new byte[]{(byte)'a'}), false);
+    String json = "{\"type\": \"fixed\", \"name\":\"Test\", \"size\": 1}";
+    Schema schema = Schema.parse(json);
+    check(json, "\"a\"",
+          new GenericData.Fixed(schema, new byte[]{(byte)'a'}), false);
     checkParseError("{\"type\":\"fixed\"}");        // size required
   }
 
@@ -307,10 +311,10 @@ public class TestSchema {
               new GenericData.Record(Schema.parse(record)),
               "{\"Foo\":{}}");
     checkJson(union,
-              new GenericData.Fixed(new byte[]{(byte)'a'}),
+              new GenericData.Fixed(Schema.parse(fixed), new 
byte[]{(byte)'a'}),
               "{\"Bar\":\"a\"}");
     checkJson(union,
-              new GenericData.EnumSymbol("X"),
+              new GenericData.EnumSymbol(Schema.parse(enu), "X"),
               "{\"Baz\":\"X\"}");
   }
 
@@ -349,13 +353,24 @@ public class TestSchema {
     symbols.add("NOTHING");
     
     // succeed with two branches of the same named type, if different names
-    buildUnion(new Schema[] {Schema.createRecord("Foo", null, "org.test", 
false),
-        Schema.createRecord("Foo2", null, "org.test", false)});
-    buildUnion(new Schema[] {Schema.createEnum("Bar", null, "org.test", 
symbols),
-        Schema.createEnum("Bar2", null, "org.test", symbols)});
-    buildUnion(new Schema[] {Schema.createFixed("Baz", null, "org.test", 2),
-        Schema.createFixed("Baz2", null, "org.test", 1)});
-
+    Schema u;
+    u = buildUnion(new Schema[] {
+        Schema.parse("{\"type\":\"record\",\"name\":\"x.A\",\"fields\":[]}"),
+        Schema.parse("{\"type\":\"record\",\"name\":\"y.A\",\"fields\":[]}")});
+    check(u.toString(), false);
+
+    u = buildUnion(new Schema[] {
+        Schema.parse
+        ("{\"type\":\"enum\",\"name\":\"x.A\",\"symbols\":[\"X\"]}"),
+        Schema.parse
+        ("{\"type\":\"enum\",\"name\":\"y.A\",\"symbols\":[\"Y\"]}")});
+    check(u.toString(), false);
+    
+    u = buildUnion(new Schema[] {
+        Schema.parse("{\"type\":\"fixed\",\"name\":\"x.A\",\"size\":4}"),
+        Schema.parse("{\"type\":\"fixed\",\"name\":\"y.A\",\"size\":8}")});
+    check(u.toString(), false);
+    
     // fail with two branches of the same named type, but same names
     checkUnionError(new Schema[] {Schema.createRecord("Foo", null, "org.test", 
false),
         Schema.createRecord("Foo", null, "org.test", false)});
@@ -663,13 +678,13 @@ public class TestSchema {
     ByteArrayOutputStream out = new ByteArrayOutputStream();
     DatumWriter<Object> writer = new GenericDatumWriter<Object>(actual);
     Encoder encoder = new BinaryEncoder(out);
-    writer.write(new GenericData.EnumSymbol("Y"), encoder);
-    writer.write(new GenericData.EnumSymbol("X"), encoder);
+    writer.write(new GenericData.EnumSymbol(actual, "Y"), encoder);
+    writer.write(new GenericData.EnumSymbol(actual, "X"), encoder);
     byte[] data = out.toByteArray();
     Decoder decoder = DecoderFactory.defaultFactory().createBinaryDecoder(
         data, null);
     DatumReader<String> in = new GenericDatumReader<String>(actual, expected);
-    assertEquals("Wrong value", new GenericData.EnumSymbol("Y"),
+    assertEquals("Wrong value", new GenericData.EnumSymbol(expected, "Y"),
                  in.read(null, decoder));
     try {
       in.read(null, decoder);

Modified: 
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificDatumWriter.java
URL: 
http://svn.apache.org/viewvc/avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificDatumWriter.java?rev=1074319&r1=1074318&r2=1074319&view=diff
==============================================================================
--- 
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificDatumWriter.java
 (original)
+++ 
avro/trunk/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificDatumWriter.java
 Thu Feb 24 22:20:32 2011
@@ -46,8 +46,8 @@ public class TestSpecificDatumWriter {
     out.close();
 
     String expectedJson = String.format(
-        "{'kind':{'Kind':'%s'},'value':{'string':'%s'}}", c.kind.toString(),
-        c.value).replace('\'', '"');
+        "{'kind':{'org.apache.avro.test.Kind':'%s'},'value':{'string':'%s'}}",
+        c.kind.toString(), c.value).replace('\'', '"');
 
     assertEquals(expectedJson, out.toString("UTF-8"));
   }


Reply via email to