diff --git a/src/main/java/org/springframework/hateoas/PagedResources.java b/src/main/java/org/springframework/hateoas/PagedResources.java index cc32ac58..ac5332c8 100644 --- a/src/main/java/org/springframework/hateoas/PagedResources.java +++ b/src/main/java/org/springframework/hateoas/PagedResources.java @@ -34,8 +34,6 @@ public class PagedResources extends Resources { public static PagedResources NO_PAGE = new PagedResources(); - @org.codehaus.jackson.annotate.JsonProperty("page")// - @com.fasterxml.jackson.annotation.JsonProperty("page")// private PageMetadata metadata; /** @@ -73,6 +71,8 @@ public class PagedResources extends Resources { * * @return the metadata */ + @org.codehaus.jackson.annotate.JsonProperty("page") + @com.fasterxml.jackson.annotation.JsonProperty("page") public PageMetadata getMetadata() { return metadata; } diff --git a/src/main/java/org/springframework/hateoas/Resource.java b/src/main/java/org/springframework/hateoas/Resource.java index 6bc1e4c5..216f3689 100644 --- a/src/main/java/org/springframework/hateoas/Resource.java +++ b/src/main/java/org/springframework/hateoas/Resource.java @@ -17,6 +17,7 @@ package org.springframework.hateoas; import java.util.Arrays; +import javax.xml.bind.annotation.XmlAnyElement; import javax.xml.bind.annotation.XmlRootElement; import org.springframework.util.Assert; @@ -29,8 +30,6 @@ import org.springframework.util.Assert; @XmlRootElement public class Resource extends ResourceSupport { - @org.codehaus.jackson.annotate.JsonUnwrapped - @com.fasterxml.jackson.annotation.JsonUnwrapped private final T content; /** @@ -68,6 +67,9 @@ public class Resource extends ResourceSupport { * * @return the content */ + @org.codehaus.jackson.annotate.JsonUnwrapped + @com.fasterxml.jackson.annotation.JsonUnwrapped + @XmlAnyElement public T getContent() { return content; } diff --git a/src/main/java/org/springframework/hateoas/ResourceSupport.java b/src/main/java/org/springframework/hateoas/ResourceSupport.java index cfb5cca4..e83aeaee 100755 --- a/src/main/java/org/springframework/hateoas/ResourceSupport.java +++ b/src/main/java/org/springframework/hateoas/ResourceSupport.java @@ -30,9 +30,6 @@ import org.springframework.util.Assert; */ public class ResourceSupport implements Identifiable { - @XmlElement(name = "link", namespace = Link.ATOM_NAMESPACE) - @org.codehaus.jackson.annotate.JsonProperty("links") - @com.fasterxml.jackson.annotation.JsonProperty("links") private final List links; public ResourceSupport() { @@ -94,6 +91,9 @@ public class ResourceSupport implements Identifiable { * * @return */ + @XmlElement(name = "link", namespace = Link.ATOM_NAMESPACE) + @org.codehaus.jackson.annotate.JsonProperty("links") + @com.fasterxml.jackson.annotation.JsonProperty("links") public List getLinks() { return Collections.unmodifiableList(links); } diff --git a/src/main/java/org/springframework/hateoas/Resources.java b/src/main/java/org/springframework/hateoas/Resources.java index 16984493..8d494f01 100644 --- a/src/main/java/org/springframework/hateoas/Resources.java +++ b/src/main/java/org/springframework/hateoas/Resources.java @@ -35,10 +35,6 @@ import org.springframework.util.Assert; @XmlRootElement(name = "entities") public class Resources extends ResourceSupport implements Iterable { - @XmlAnyElement - @XmlElementWrapper - @org.codehaus.jackson.annotate.JsonProperty("content") - @com.fasterxml.jackson.annotation.JsonProperty("content") private final Collection content; /** @@ -100,6 +96,10 @@ public class Resources extends ResourceSupport implements Iterable { * * @return the content will never be {@literal null}. */ + @XmlAnyElement + @XmlElementWrapper + @org.codehaus.jackson.annotate.JsonProperty("content") + @com.fasterxml.jackson.annotation.JsonProperty("content") public Collection getContent() { return Collections.unmodifiableCollection(content); } diff --git a/src/test/java/org/springframework/hateoas/ResourceIntegrationTest.java b/src/test/java/org/springframework/hateoas/ResourceIntegrationTest.java index 001c366c..71bf939e 100644 --- a/src/test/java/org/springframework/hateoas/ResourceIntegrationTest.java +++ b/src/test/java/org/springframework/hateoas/ResourceIntegrationTest.java @@ -18,6 +18,13 @@ package org.springframework.hateoas; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; +import java.io.StringWriter; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Marshaller; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; + import org.codehaus.jackson.annotate.JsonAutoDetect; import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility; import org.junit.Test; @@ -30,6 +37,7 @@ import org.junit.Test; public class ResourceIntegrationTest extends AbstractMarshallingIntegrationTest { static final String REFERENCE = "{\"links\":[{\"rel\":\"self\",\"href\":\"localhost\"}],\"firstname\":\"Dave\",\"lastname\":\"Matthews\"}"; + static final String XML_REFERENCE = ""; @Test public void inlinesContent() throws Exception { @@ -44,6 +52,28 @@ public class ResourceIntegrationTest extends AbstractMarshallingIntegrationTest assertThat(write(resource), is(REFERENCE)); } + /** + * @see #124 + */ + @Test + public void marshalsResourceToXml() throws Exception { + + Person person = new Person(); + person.firstname = "Dave"; + person.lastname = "Matthews"; + + PersonResource resource = new PersonResource(person); + resource.add(new Link("/foo", "bar")); + + JAXBContext context = JAXBContext.newInstance(PersonResource.class, Person.class); + StringWriter writer = new StringWriter(); + + Marshaller marshaller = context.createMarshaller(); + marshaller.marshal(resource, writer); + + assertThat(writer.toString(), is(XML_REFERENCE)); + } + /** * @see #14 */ @@ -58,17 +88,21 @@ public class ResourceIntegrationTest extends AbstractMarshallingIntegrationTest assertThat(result.getContent().lastname, is("Matthews")); } + @XmlRootElement static class PersonResource extends Resource { - public PersonResource() { - + public PersonResource(Person person) { + super(person); } + + protected PersonResource() {} } @JsonAutoDetect(fieldVisibility = Visibility.ANY) + @XmlRootElement static class Person { - String firstname; - String lastname; + @XmlAttribute String firstname; + @XmlAttribute String lastname; } }