Hi
I'm looking into using Restlet for a project, but I've found that between
version 2.0.6 and 2.0.7 something changed in the way that an object is
serialized to XML.
In the context of a simple JAX-RS application, I have these classes
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/")
public class HelloService {
private HelloResource resource = new HelloResource ();
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getSimpleHello ()
{
return resource.toString();
}
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public HelloResource getHello ()
{
return resource;
}
}
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name="greeting")
public class HelloResource {
private String who = "World";
private String how = "Hello";
@XmlElement(name="who")
public String getWho () {
return this.who;
}
@XmlElement(name="how")
public String getHow () {
return this.how;
}
public void setWho (String who) {
this.who = who;
}
public void setHow (String how) {
this.how = how;
}
@Override
public String toString () {
return String.format("%s, %s!", this.how, this.who);
}
}
Using curl to fetch json data I get this response
curl -H "Accept: application/json" localhost:8888/HelloRest/
{"how":"Hello","who":"World"}
For xml, this is what I get when using 2.0.6
curl -H "Accept: application/xml" localhost:8888/HelloRest/
<?xml version="1.0" encoding="UTF-8"
standalone="yes"?><greeting><how>Hello</how><who>World</who></greeting>
With 2.0.7 I get this exception on the server
13-May-2011 11:26:13 org.restlet.engine.http.adapter.ServerAdapter commit
SEVERE: An exception occured writing the response entity
java.lang.ClassCastException: java.lang.Class cannot be cast to
java.lang.Comparable
at java.util.TreeMap.getEntry(TreeMap.java:325)
at java.util.TreeMap.get(TreeMap.java:255)
at
org.restlet.ext.jaxrs.internal.provider.AbstractJaxbProvider.getJaxbContext(AbstractJaxbProvider.java:73)
at
org.restlet.ext.jaxrs.internal.provider.AbstractJaxbProvider.getJaxbContext(AbstractJaxbProvider.java:105)
at
org.restlet.ext.jaxrs.internal.provider.AbstractJaxbProvider.marshal(AbstractJaxbProvider.java:122)
at
org.restlet.ext.jaxrs.internal.provider.JaxbProvider.writeTo(JaxbProvider.java:111)
at
org.restlet.ext.jaxrs.internal.wrappers.provider.SingletonProvider.writeTo(SingletonProvider.java:342)
at
org.restlet.ext.jaxrs.internal.util.JaxRsOutputRepresentation.write(JaxRsOutputRepresentation.java:109)
at
org.restlet.engine.http.ServerCall.writeResponseBody(ServerCall.java:537)
at org.restlet.engine.http.ServerCall.sendResponse(ServerCall.java:475)
at
org.restlet.ext.servlet.internal.ServletCall.sendResponse(ServletCall.java:453)
at
org.restlet.engine.http.adapter.ServerAdapter.commit(ServerAdapter.java:197)
at
org.restlet.engine.http.HttpServerHelper.handle(HttpServerHelper.java:151)
at
org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1037)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440)
at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
at
org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at
org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Have I missed something somewhere or has something gone awry between versions?
Thanks
Dave Kennedy
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2735310