Hi Dave, There was indeed a regression introduced with JAX-RS+JAXB in 2.0.7 that was fixed afterwards. We will release 2.0.8 at the end of the month. For now, I would suggest going back to 2.0.5 in your case.
Best regards, Jerome -- Restlet ~ Founder and Technical Lead ~ http://www.restlet.org Noelios Technologies ~ http://www.noelios.com -----Message d'origine----- De : Dave Kennedy [mailto:david.kenn...@betfair.com] Envoyé : vendredi 13 mai 2011 12:30 À : discuss@restlet.tigris.org Objet : Updated from Restlet 2.0.6 to 2.0.7 - now getting exception in JAXB serialisation 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 ------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2735588