Hi,
Thanks for the great response on my last post.
This time I am having difficulty dealing with arrays.
In my previous post I was having problems with returning a custom Object
(with JAXB annotations).
I am now having difficulties generating the XML for an Array of these
Objects.
My example class is called Artifact:
import javax.xml.bind.annotation.*;
/**
*
* @author km
*/
@javax.xml.bind.annotation.XmlRootElement
@javax.xml.bind.annotation.XmlAccessorType(XmlAccessType.FIELD)
public class Artifact {
//_at_javax.xml.bind.annotation.XmlElement
protected long artifactId;
//_at_javax.xml.bind.annotation.XmlElement
protected String artifactType;
public Artifact() {
}
/**
* @return the artifactId
*/
public long getArtifactId() {
return artifactId;
}
/**
* @param artifactId the artifactId to set
*/
public void setArtifactId(long artifactId) {
this.artifactId = artifactId;
}
/**
* @return the artifactType
*/
public String getArtifactType() {
return artifactType;
}
/**
* @param artifactType the artifactType to set
*/
public void setArtifactType(String artifactType) {
this.artifactType = artifactType;
}
}
This class is all good - works well when marshalling and serlializing to
XML.
An example of the method that returns the XML for this object is shown
below:
@GET
@Path("/user/{userId}/artifacts/{artifactId}")
//_at_Produces("application/json")
public Artifact getArtifact (@PathParam("userId") long userId
, @PathParam("artifactId") long artifactId) {
Artifact returnedArtifact = null;
try {
returnedArtifact = dA.getArtifact(0, userId, artifactId);
}
catch (Exception e) {
e.printStackTrace();
}
return returnedArtifact;
}
This works great.
However, when I introduce a new method which returns an Array of Artifact
objects. I get problems:
@GET
@Path("/user/{userId}/artifacts")
public Artifact[] getArtifacts (@PathParam("userId") long userId) {
Artifact[] returnedArtifacts = null;
try {
System.out.println("userId value is " + userId);
returnedArtifacts = dA.getArtifacts(1, userId);
}
catch (Exception e) {
e.printStackTrace();
}
return returnedArtifacts;
}
In this case I get the following error:
SEVERE: A message body writer for Java type, class
[Lcom.knowledgemill.entities.Artifact;, and MIME media type, text/xml, was
not found
javax.ws.rs.WebApplicationException
at
com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:239)
at
com.sun.jersey.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:752)
etc.. etc...
Basically, my question is - How do I serlialize and array of the custom
objects.
Perhaps I have to use a collection instead (this would be disappointing -
arrays seem neater and more efficient).
Thanks for any help.
Regards,
James