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.o​rg
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

Reply via email to