diff --git a/lang/java/avro/src/main/java/org/apache/avro/UnresolvedUnionException.java b/lang/java/avro/src/main/java/org/apache/avro/UnresolvedUnionException.java index 8f25c2cc9a8..1e11a4967af 100644 --- a/lang/java/avro/src/main/java/org/apache/avro/UnresolvedUnionException.java +++ b/lang/java/avro/src/main/java/org/apache/avro/UnresolvedUnionException.java @@ -24,13 +24,14 @@ public class UnresolvedUnionException extends AvroRuntimeException { private Schema unionSchema; public UnresolvedUnionException(Schema unionSchema, Object unresolvedDatum) { - super("Not in union " + unionSchema + ": " + unresolvedDatum); + super("Not in union " + unionSchema + ": " + datumTypeDescription(unresolvedDatum)); this.unionSchema = unionSchema; this.unresolvedDatum = unresolvedDatum; } public UnresolvedUnionException(Schema unionSchema, Schema.Field field, Object unresolvedDatum) { - super("Not in union " + unionSchema + ": " + unresolvedDatum + " (field=" + field.name() + ")"); + super( + "Not in union " + unionSchema + ": " + datumTypeDescription(unresolvedDatum) + " (field=" + field.name() + ")"); this.unionSchema = unionSchema; this.unresolvedDatum = unresolvedDatum; } @@ -42,4 +43,8 @@ public Object getUnresolvedDatum() { public Schema getUnionSchema() { return unionSchema; } + + private static String datumTypeDescription(Object datum) { + return datum == null ? "null" : datum.getClass().getName(); + } } diff --git a/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericDatumWriter.java b/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericDatumWriter.java index dc3661f467b..03123ffcf86 100644 --- a/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericDatumWriter.java +++ b/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericDatumWriter.java @@ -56,7 +56,7 @@ void unionUnresolvedExceptionExplicitWhichField() throws IOException { new GenericDatumWriter<>(s).write(r, EncoderFactory.get().jsonEncoder(s, bao)); fail(); } catch (final UnresolvedUnionException uue) { - assertEquals("Not in union [\"null\",\"string\"]: 100 (field=f)", uue.getMessage()); + assertEquals("Not in union [\"null\",\"string\"]: java.lang.Integer (field=f)", uue.getMessage()); } }