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.
This commit is contained in:
Oliver Gierke
2011-12-01 12:16:27 +01:00
parent ef063613c7
commit f4063d1679
2 changed files with 18 additions and 1 deletions

View File

@@ -36,7 +36,8 @@ public abstract class AbstractMongoEventListener<E> 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;
}
/*

View File

@@ -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<Person> {
@@ -163,4 +174,9 @@ public class AbstractMongoEventListenerUnitTest {
invokedOnAfterLoad = true;
}
}
@SuppressWarnings("rawtypes")
class UntypedEventListener extends AbstractMongoEventListener {
}
}