Browse Source

DATAMONGO-382 - Fixed potential ClassCastException in MappingMongoConverter.

MappingMongoConverter's convertToMongoType(…) now deals with Sets (and more generally all Collections) correctly.
pull/1/head
Oliver Gierke 14 years ago
parent
commit
93c9713adf
  1. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverter.java
  2. 18
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java

8
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 @@ -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);

18
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java

@ -998,6 +998,24 @@ public class MappingMongoConverterUnitTests { @@ -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> {
T content;
}

Loading…
Cancel
Save