From f4063d1679e26e8aa3d750da388cbb52ece0f283 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 1 Dec 2011 12:16:27 +0100 Subject: [PATCH] DATAMONGO-333 - Default to Object for AbstractMongoEventlistener domain type. In case an extension of AbstractMongoEventListener does not define a parameter type we now default to Object as handled domain type as we'd cause a NullPointerException if not. --- .../event/AbstractMongoEventListener.java | 3 ++- .../AbstractMongoEventListenerUnitTest.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListener.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListener.java index 1e9945979..26e9dda3c 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListener.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListener.java @@ -36,7 +36,8 @@ public abstract class AbstractMongoEventListener implements ApplicationListen * Creates a new {@link AbstractMongoEventListener}. */ public AbstractMongoEventListener() { - this.domainClass = GenericTypeResolver.resolveTypeArgument(this.getClass(), AbstractMongoEventListener.class); + Class typeArgument = GenericTypeResolver.resolveTypeArgument(this.getClass(), AbstractMongoEventListener.class); + this.domainClass = typeArgument == null ? Object.class : typeArgument; } /* diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListenerUnitTest.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListenerUnitTest.java index 1c54cc842..3f4540662 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListenerUnitTest.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListenerUnitTest.java @@ -115,6 +115,17 @@ public class AbstractMongoEventListenerUnitTest { assertThat(personListener.invokedOnAfterLoad, is(false)); assertThat(contactListener.invokedOnAfterLoad, is(true)); } + + /** + * @see DATADOC-333 + */ + @Test + @SuppressWarnings({ "rawtypes", "unchecked" }) + public void handlesUntypedImplementations() { + + UntypedEventListener listener = new UntypedEventListener(); + listener.onApplicationEvent(new MongoMappingEvent(new Object(), new BasicDBObject())); + } class SamplePersonEventListener extends AbstractMongoEventListener { @@ -163,4 +174,9 @@ public class AbstractMongoEventListenerUnitTest { invokedOnAfterLoad = true; } } + + @SuppressWarnings("rawtypes") + class UntypedEventListener extends AbstractMongoEventListener { + + } }