diff --git a/pom.xml b/pom.xml
index abc51839..1058b52d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- couchbase
+ com.couchbase
+ spring-data-couchbase
0.1.0-SNAPSHOT
jar
@@ -21,8 +22,11 @@
+
UTF-8
+ 1.1.6
+ 3.2.3.RELEASE
@@ -31,9 +35,6 @@
Couchbase Maven Repository
default
http://files.couchbase.com/maven2/
-
- false
-
@@ -41,13 +42,12 @@
couchbase
couchbase-client
- 1.1.5
+ ${couchbase}
org.springframework
spring-context
- 3.2.2.RELEASE
- jar
+ ${spring}
cglib
@@ -63,13 +63,13 @@
org.springframework
spring-test
- 3.2.2.RELEASE
+ ${spring}
test
org.springframework.data
- spring-data-commons-core
- 1.4.1.RELEASE
+ spring-data-commons
+ 1.5.1.RELEASE
org.codehaus.jackson
@@ -79,8 +79,8 @@
org.springframework
spring-tx
- 3.2.2.RELEASE
+ ${spring}
- spring-data-couchbase
+
diff --git a/src/main/java/com/couchbase/spring/core/convert/MappingCouchbaseConverter.java b/src/main/java/com/couchbase/spring/core/convert/MappingCouchbaseConverter.java
index ce23e4af..71ad8e74 100644
--- a/src/main/java/com/couchbase/spring/core/convert/MappingCouchbaseConverter.java
+++ b/src/main/java/com/couchbase/spring/core/convert/MappingCouchbaseConverter.java
@@ -32,6 +32,7 @@ import java.io.OutputStream;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
+import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@@ -168,6 +169,7 @@ public class MappingCouchbaseConverter extends AbstractCouchbaseConverter
OutputStream jsonStream = new ByteArrayOutputStream();
final JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(
jsonStream, JsonEncoding.UTF8);
+ jsonGenerator.setCodec(new ObjectMapper());
jsonGenerator.writeStartObject();
entity.doWithProperties(new PropertyHandler() {
diff --git a/src/test/java/com/couchbase/spring/core/CouchbaseTemplateTest.java b/src/test/java/com/couchbase/spring/core/CouchbaseTemplateTest.java
index 2eecd246..3cfec5ed 100644
--- a/src/test/java/com/couchbase/spring/core/CouchbaseTemplateTest.java
+++ b/src/test/java/com/couchbase/spring/core/CouchbaseTemplateTest.java
@@ -35,6 +35,10 @@ import org.springframework.data.annotation.Id;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestApplicationConfig.class)
public class CouchbaseTemplateTest {
@@ -121,12 +125,32 @@ public class CouchbaseTemplateTest {
result = client.get(id);
assertNull(result);
}
+
+ @Test
+ public void storeLists() {
+ String id ="persons:lots-of-names";
+ List names = new ArrayList();
+ names.add("Michael");
+ names.add("Thomas");
+ List votes = new LinkedList();
+ ComplexPerson complex = new ComplexPerson(id, names, votes);
+
+ template.save(complex);
+
+ String expected = "{\"votes\":[],\"firstnames\":[\"Michael\",\"Thomas\"]}";
+ assertEquals(expected, client.get(id));
+
+ ComplexPerson response = template.findById(id, ComplexPerson.class);
+ assertEquals(names, response.getFirstnames());
+ assertEquals(votes, response.getVotes());
+ assertEquals(id, response.getId());
+ }
/**
* A sample document with just an id and property.
*/
@Document
- class SimplePerson {
+ static class SimplePerson {
@Id
private final String id;
@Field
@@ -142,7 +166,7 @@ public class CouchbaseTemplateTest {
* A sample document that expires in 2 seconds.
*/
@Document(expiry=2)
- class DocumentWithExpiry {
+ static class DocumentWithExpiry {
@Id
private final String id;
@@ -150,4 +174,33 @@ public class CouchbaseTemplateTest {
this.id = id;
}
}
+
+ @Document
+ static class ComplexPerson {
+ @Id
+ private final String id;
+ @Field
+ private final List firstnames;
+ @Field
+ private final List votes;
+
+ public ComplexPerson(String id, List firstnames,
+ List votes) {
+ this.id = id;
+ this.firstnames = firstnames;
+ this.votes = votes;
+ }
+
+ List getFirstnames() {
+ return firstnames;
+ }
+
+ List getVotes() {
+ return votes;
+ }
+
+ String getId() {
+ return id;
+ }
+ }
}