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/09/21 22:44:42 UTC

svn commit: r1173842 - in /avro/trunk: CHANGES.txt lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java lang/java/avro/src/test/java/org/apache/avro/TestReflect.java

Author: cutting
Date: Wed Sep 21 20:44:41 2011
New Revision: 1173842

URL: http://svn.apache.org/viewvc?rev=1173842&view=rev
Log:
AVRO-887. Java: Improve reflection error message when a field is not found in a class.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java
    avro/trunk/lang/java/avro/src/test/java/org/apache/avro/TestReflect.java

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1173842&r1=1173841&r2=1173842&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Wed Sep 21 20:44:41 2011
@@ -63,6 +63,9 @@ Avro 1.6.0 (unreleased)
     AVRO-888. Java: Add SeekableByteArrayInput, a utility to permit
     use of memory-based AvroDataFiles.  (Saleem Shafi via cutting)
 
+    AVRO-887. Java: Improve reflection error message when a field is
+    not found in a class.  (cutting)
+
   BUG FIXES
 
     AVRO-824. Java: Fix usage message of BinaryFragmentToJsonTool.

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java?rev=1173842&r1=1173841&r2=1173842&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/reflect/ReflectData.java Wed Sep 21 20:44:41 2011
@@ -163,7 +163,8 @@ public class ReflectData extends Specifi
     return f;
   }
 
-  private static Field findField(Class c, String name) {
+  private static Field findField(Class original, String name) {
+    Class c = original;
     do {
       try {
         Field f = c.getDeclaredField(name);
@@ -172,7 +173,7 @@ public class ReflectData extends Specifi
       } catch (NoSuchFieldException e) {}
       c = c.getSuperclass();
     } while (c != null);
-    throw new AvroRuntimeException("No field named "+name+" in: "+c);
+    throw new AvroRuntimeException("No field named "+name+" in: "+original);
   }
 
   static final String CLASS_PROP = "java-class";

Modified: avro/trunk/lang/java/avro/src/test/java/org/apache/avro/TestReflect.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/TestReflect.java?rev=1173842&r1=1173841&r2=1173842&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/test/java/org/apache/avro/TestReflect.java (original)
+++ avro/trunk/lang/java/avro/src/test/java/org/apache/avro/TestReflect.java Wed Sep 21 20:44:41 2011
@@ -579,6 +579,16 @@ public class TestReflect {
     assertEquals(0, ReflectData.get().compare(datum, decoded, schema));
   }
 
+  /** Test that the error message contains the name of the class. */
+  @Test
+  public void testReflectFieldError() throws Exception {
+    Object datum = "";
+    try {
+      ReflectData.get().getField(datum, "notAFieldOfString", 0);
+    } catch (AvroRuntimeException e) {
+      assertTrue(e.getMessage().contains(datum.getClass().getName()));
+    }
+  }
 
 
 }