From d4c0aa70ba8129d9d57f0306aaa48324cf729210 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 8 Jun 2016 16:04:06 +0200 Subject: [PATCH] =?UTF-8?q?DATACMNS-866=20-=20Improved=20error=20message?= =?UTF-8?q?=20in=20invalid=20invocations=20of=20BasicPersistentEntity.getP?= =?UTF-8?q?ropertyAccessor(=E2=80=A6).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now explicitly report the given object's type and the one expected in case of a mismatch when BasicPersistentEntity.getPropertyAccessor(…) is invoked. --- .../mapping/model/BasicPersistentEntity.java | 6 +++++- .../model/BasicPersistentEntityUnitTests.java | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java b/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java index 1b88985bf..e408065e4 100644 --- a/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java +++ b/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java @@ -58,6 +58,8 @@ import org.springframework.util.StringUtils; */ public class BasicPersistentEntity> implements MutablePersistentEntity { + private static final String TYPE_MISMATCH = "Target bean of type %s is not of type of the persistent entity (%s)!"; + private final PreferredConstructor constructor; private final TypeInformation information; private final List

properties; @@ -408,7 +410,9 @@ public class BasicPersistentEntity> 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); } diff --git a/src/test/java/org/springframework/data/mapping/model/BasicPersistentEntityUnitTests.java b/src/test/java/org/springframework/data/mapping/model/BasicPersistentEntityUnitTests.java index 28c8a5de4..5330b73be 100644 --- a/src/test/java/org/springframework/data/mapping/model/BasicPersistentEntityUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/BasicPersistentEntityUnitTests.java @@ -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> { assertThat(entity.getTypeAlias(), is((Object) "bar")); } + /** + * @see DATACMNS-866 + */ + @Test + public void invalidBeanAccessCreatesDescriptiveErrorMessage() { + + PersistentEntity entity = createEntity(Entity.class); + + exception.expectMessage(Entity.class.getName()); + exception.expectMessage(Object.class.getName()); + + entity.getPropertyAccessor(new Object()); + } + private BasicPersistentEntity createEntity(Class type) { return createEntity(type, null); }