DATACMNS-866 - Improved error message in invalid invocations of BasicPersistentEntity.getPropertyAccessor(…).

We now explicitly report the given object's type and the one expected in case of a mismatch when BasicPersistentEntity.getPropertyAccessor(…) is invoked.
This commit is contained in:
Oliver Gierke
2016-06-08 16:04:06 +02:00
parent 241d18a212
commit d4c0aa70ba
2 changed files with 20 additions and 2 deletions

View File

@@ -58,6 +58,8 @@ import org.springframework.util.StringUtils;
*/
public class BasicPersistentEntity<T, P extends PersistentProperty<P>> implements MutablePersistentEntity<T, P> {
private static final String TYPE_MISMATCH = "Target bean of type %s is not of type of the persistent entity (%s)!";
private final PreferredConstructor<T, P> constructor;
private final TypeInformation<T> information;
private final List<P> properties;
@@ -408,7 +410,9 @@ public class BasicPersistentEntity<T, P extends PersistentProperty<P>> implement
public PersistentPropertyAccessor getPropertyAccessor(Object bean) {
Assert.notNull(bean, "Target bean must not be null!");
Assert.isTrue(getType().isInstance(bean), "Target bean is not of type of the persistent entity!");
Assert.isTrue(getType().isInstance(bean),
String.format(TYPE_MISMATCH, bean.getClass().getName(), getType().getName()));
return propertyAccessorFactory.getPropertyAccessor(this, bean);
}

View File

@@ -17,7 +17,7 @@ package org.springframework.data.mapping.model;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.junit.Assume.assumeThat;
import static org.junit.Assume.*;
import static org.mockito.Mockito.*;
import java.lang.annotation.Retention;
@@ -261,6 +261,20 @@ public class BasicPersistentEntityUnitTests<T extends PersistentProperty<T>> {
assertThat(entity.getTypeAlias(), is((Object) "bar"));
}
/**
* @see DATACMNS-866
*/
@Test
public void invalidBeanAccessCreatesDescriptiveErrorMessage() {
PersistentEntity<Entity, T> entity = createEntity(Entity.class);
exception.expectMessage(Entity.class.getName());
exception.expectMessage(Object.class.getName());
entity.getPropertyAccessor(new Object());
}
private <S> BasicPersistentEntity<S, T> createEntity(Class<S> type) {
return createEntity(type, null);
}