From 93c9713adfe83af3ebb0a60b0871a90daad680dc Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 6 Mar 2012 21:26:10 +0100 Subject: [PATCH] DATAMONGO-382 - Fixed potential ClassCastException in MappingMongoConverter. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MappingMongoConverter's convertToMongoType(…) now deals with Sets (and more generally all Collections) correctly. --- .../core/convert/MappingMongoConverter.java | 8 ++++---- .../MappingMongoConverterUnitTests.java | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java index ef2a003a6..2edf59820 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java @@ -813,14 +813,14 @@ public class MappingMongoConverter extends AbstractMongoConverter implements App return result; } - if (obj instanceof List) { - return maybeConvertList((List) obj); - } - if (obj.getClass().isArray()) { return maybeConvertList(Arrays.asList((Object[]) obj)); } + if (obj instanceof Collection) { + return maybeConvertList((Collection) obj); + } + DBObject newDbo = new BasicDBObject(); this.write(obj, newDbo); return removeTypeInfoRecursively(newDbo); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java index ec4fe5764..41e051c4c 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java @@ -998,6 +998,24 @@ public class MappingMongoConverterUnitTests { assertThat(result.containsKey("foobar"), is(false)); } + /** + * @see DATAMONGO-382 + */ + @Test + public void convertsSetToBasicDBList() { + + Address address = new Address(); + address.city = "London"; + address.street = "Foo"; + + Object result = converter.convertToMongoType(Collections.singleton(address)); + assertThat(result, is(BasicDBList.class)); + + Set readResult = converter.read(Set.class, (BasicDBList) result); + assertThat(readResult.size(), is(1)); + assertThat(readResult.iterator().next(), is(Map.class)); + } + static class GenericType { T content; }