From c7c7a2f4c0d2dbdccf471f5741313cdda34fea58 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 18 Sep 2014 13:34:59 +0200 Subject: [PATCH 1/2] DATAMONGO-1053 - Mapping fails for non string language fields. Prepare issue branch. --- pom.xml | 2 +- spring-data-mongodb-cross-store/pom.xml | 4 ++-- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb-log4j/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 75745189ed..c5967a43d9 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1053-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml index 40e8a0f253..92c08d0604 100644 --- a/spring-data-mongodb-cross-store/pom.xml +++ b/spring-data-mongodb-cross-store/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1053-SNAPSHOT ../pom.xml @@ -48,7 +48,7 @@ org.springframework.data spring-data-mongodb - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1053-SNAPSHOT diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 13110137b6..45682ebfe6 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1053-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml index 6ff09e4577..c93f5093a2 100644 --- a/spring-data-mongodb-log4j/pom.xml +++ b/spring-data-mongodb-log4j/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1053-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index bfcacd66eb..2c916ee45b 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 1.7.0.BUILD-SNAPSHOT + 1.7.0.DATAMONGO-1053-SNAPSHOT ../pom.xml From 4812f518457cba793a3e0e1528f293446a4a104d Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 25 Sep 2014 15:25:51 +0200 Subject: [PATCH 2/2] DATAMONGO-1053 - Only type check explicit language properties. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now only perform a type check on via @Language explicitly defined language properties. Prior to this change non String properties named ‘language’ cause errors on entity validation. --- .../mapping/BasicMongoPersistentEntity.java | 2 +- .../BasicMongoPersistentEntityUnitTests.java | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntity.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntity.java index c99c0eef84..b4f4f1a2b1 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntity.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntity.java @@ -284,7 +284,7 @@ public void doWithPersistentProperty(MongoPersistentProperty persistentProperty) private void potentiallyAssertLanguageType(MongoPersistentProperty persistentProperty) { - if (persistentProperty.isLanguageProperty()) { + if (persistentProperty.isExplicitLanguageProperty()) { assertPropertyType(persistentProperty, String.class); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java index ac2ff1f9e1..4ad9439d5a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java @@ -24,6 +24,7 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.context.ApplicationContext; +import org.springframework.data.mapping.model.MappingException; import org.springframework.data.util.ClassTypeInformation; /** @@ -36,6 +37,7 @@ public class BasicMongoPersistentEntityUnitTests { @Mock ApplicationContext context; + @Mock MongoPersistentProperty propertyMock; @Test public void subclassInheritsAtDocumentAnnotation() { @@ -80,6 +82,61 @@ public void shouldDetectLanguageCorrectly() { assertThat(entity.getLanguage(), is("spanish")); } + /** + * @see DATAMONGO-1053 + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Test(expected = MappingException.class) + public void verifyShouldThrowExceptionForInvalidTypeOfExplicitLanguageProperty() { + + BasicMongoPersistentEntity entity = new BasicMongoPersistentEntity( + ClassTypeInformation.from(AnyDocument.class)); + + when(propertyMock.isExplicitLanguageProperty()).thenReturn(true); + when(propertyMock.getActualType()).thenReturn((Class) Number.class); + + entity.addPersistentProperty(propertyMock); + entity.verify(); + } + + /** + * @see DATAMONGO-1053 + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Test + public void verifyShouldPassForStringAsExplicitLanguageProperty() { + + BasicMongoPersistentEntity entity = new BasicMongoPersistentEntity( + ClassTypeInformation.from(AnyDocument.class)); + when(propertyMock.isExplicitLanguageProperty()).thenReturn(true); + when(propertyMock.getActualType()).thenReturn((Class) String.class); + entity.addPersistentProperty(propertyMock); + + entity.verify(); + + verify(propertyMock, times(1)).isExplicitLanguageProperty(); + verify(propertyMock, times(1)).getActualType(); + } + + /** + * @see DATAMONGO-1053 + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Test + public void verifyShouldIgnoreNonExplicitLanguageProperty() { + + BasicMongoPersistentEntity entity = new BasicMongoPersistentEntity( + ClassTypeInformation.from(AnyDocument.class)); + when(propertyMock.isExplicitLanguageProperty()).thenReturn(false); + when(propertyMock.getActualType()).thenReturn((Class) Number.class); + entity.addPersistentProperty(propertyMock); + + entity.verify(); + + verify(propertyMock, times(1)).isExplicitLanguageProperty(); + verify(propertyMock, never()).getActualType(); + } + @Document(collection = "contacts") class Contact { @@ -111,4 +168,8 @@ public String getCollectionName() { static class DocumentWithLanguage { } + + static class AnyDocument { + + } }