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 2012/05/16 23:47:23 UTC
svn commit: r1339381 - in /avro/trunk: CHANGES.txt
lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
lang/java/avro/src/test/java/org/apache/avro/specific/
lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificData.java
Author: cutting
Date: Wed May 16 21:47:22 2012
New Revision: 1339381
URL: http://svn.apache.org/viewvc?rev=1339381&view=rev
Log:
AVRO-1051. Java: Fix specific RPC so that method is found when parameters are a union of a primitive and null. Contributed by Hamed Asghari.
Added:
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/specific/
avro/trunk/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificData.java (with props)
Modified:
avro/trunk/CHANGES.txt
avro/trunk/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1339381&r1=1339380&r2=1339381&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Wed May 16 21:47:22 2012
@@ -58,6 +58,10 @@ Avro 1.6.3 (5 March 2012)
AVRO-1078. ostreamOutputStream declaration missing in C++ API (thiru)
+ AVRO-1051. Java: Fix specific RPC so that method is found when
+ parameters are a union of a primitive and null.
+ (Hamed Asghari via cutting)
+
IMPROVEMENTS
AVRO-1030. Fix a broken link in the documentation.
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=1339381&r1=1339380&r2=1339381&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 Wed May 16 21:47:22 2012
@@ -103,7 +103,7 @@ public class SpecificData extends Generi
case UNION:
List<Schema> types = schema.getTypes(); // elide unions with null
if ((types.size() == 2) && types.contains(NULL_SCHEMA))
- return getClass(types.get(types.get(0).equals(NULL_SCHEMA) ? 1 : 0));
+ return getWrapper(types.get(types.get(0).equals(NULL_SCHEMA) ? 1 : 0));
return Object.class;
case STRING:
if (STRING_TYPE_STRING.equals(schema.getProp(STRING_PROP)))
@@ -120,6 +120,17 @@ public class SpecificData extends Generi
}
}
+ private Class getWrapper(Schema schema) {
+ switch (schema.getType()) {
+ case INT: return Integer.class;
+ case LONG: return Long.class;
+ case FLOAT: return Float.class;
+ case DOUBLE: return Double.class;
+ case BOOLEAN: return Boolean.class;
+ }
+ return getClass(schema);
+ }
+
/** Returns the Java class name indicated by a schema's name and namespace. */
public static String getClassName(Schema schema) {
String namespace = schema.getNamespace();
Added: avro/trunk/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificData.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificData.java?rev=1339381&view=auto
==============================================================================
--- avro/trunk/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificData.java (added)
+++ avro/trunk/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificData.java Wed May 16 21:47:22 2012
@@ -0,0 +1,62 @@
+package org.apache.avro.specific;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Arrays;
+
+import org.apache.avro.Schema;
+import org.apache.avro.Schema.Type;
+import org.junit.Before;
+import org.junit.Test;
+
+/*
+ * If integerClass is primitive, reflection to find method will
+ * result in a NoSuchMethodException in the case of a UNION schema
+ */
+public class TestSpecificData {
+
+ private Class<?> intClass;
+ private Class<?> integerClass;
+
+ @Before
+ public void setUp() {
+ Schema intSchema = Schema.create(Type.INT);
+ intClass = SpecificData.get().getClass(intSchema);
+ Schema nullSchema = Schema.create(Type.NULL);
+ Schema nullIntUnionSchema = Schema.createUnion(Arrays.asList(nullSchema, intSchema));
+ integerClass = SpecificData.get().getClass(nullIntUnionSchema);
+ }
+
+ @Test
+ public void testClassTypes() {
+ assertTrue(intClass.isPrimitive());
+ assertFalse(integerClass.isPrimitive());
+ }
+
+ @Test
+ public void testPrimitiveParam() throws Exception {
+ assertNotNull(Reflection.class.getMethod("primitive", intClass));
+ }
+
+ @Test(expected = NoSuchMethodException.class)
+ public void testPrimitiveParamError() throws Exception {
+ Reflection.class.getMethod("primitiveWrapper", intClass);
+ }
+
+ @Test
+ public void testPrimitiveWrapperParam() throws Exception {
+ assertNotNull(Reflection.class.getMethod("primitiveWrapper", integerClass));
+ }
+
+ @Test(expected = NoSuchMethodException.class)
+ public void testPrimitiveWrapperParamError() throws Exception {
+ Reflection.class.getMethod("primitive", integerClass);
+ }
+
+ static class Reflection {
+ public void primitive(int i) {}
+ public void primitiveWrapper(Integer i) {}
+ }
+}
Propchange: avro/trunk/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificData.java
------------------------------------------------------------------------------
svn:eol-style = native