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"));
}