JAX-RS - Konnte nicht finden, MessageBodyWriter für response-Objekt vom Typ
Ich versuche zu arbeiten, aus einer Probe von JAX-RS in der JBoss 7.2 Rest Einfach. Ich erhalte eine Fehlermeldung, wie unten beschrieben.
SCHWERER [org.jboss.resteasy.core.SynchronousDispatcher]
(http-/0.0.0.0:80-2) Fehler beim ausführen von GET /test/resources/1:
org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Konnte nicht
finden MessageBodyWriter für die Antwort, Objekt-Typ: vsample.Bild
Medien-Typ: image/jpeg bei
org.jboss.resteasy.core.ServerResponse.writecontentto(ServerResponse.java:216)
[resteasy-jaxrs-2.3.5.Final.jar:] bei
org.jboss.resteasy.core.SynchronousDispatcher.writeJaxrsResponse(SynchronousDispatcher.java:602)
[resteasy-jaxrs-2.3.5.Final.jar:] bei
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:528)
[resteasy-jaxrs-2.3.5.Final.jar:] bei
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:126)
[resteasy-jaxrs-2.3.5.Final.jar:] bei
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)
[resteasy-jaxrs-2.3.5.Final.jar:] bei
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)
[resteasy-jaxrs-2.3.5.Final.jar:] bei
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)
[resteasy-jaxrs-2.3.5.Final.jar:] bei
javax.- servlet.http.HttpServlet.service(HttpServlet.java:847)
[jboss-servlet-api_3.0_spec-1.0.2.Endgültig.jar:1.0.2.Endg.] an
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
[jboss-as-web-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.catalina.Ventile.ErrorReportValve.invoke(ErrorReportValve.java:97)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.catalina.- Anschluss.CoyoteAdapter.service(CoyoteAdapter.java:336)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.coyote.http11.Http11Processor.Prozess(Http11Processor.java:856)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.Prozess(Http11Protocol.java:653)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920)
[jbossweb-7.2.0.Endgültig.jar:7.2.0.Endg.] an
java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_17]
Und mein code ist,
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
@ApplicationPath("/rest")
public class Etag extends Application {
}
Und
import java.util.Date;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.EntityTag;
import javax.ws.rs.core.Response.ResponseBuilder;
@Path( "/test" )
public class EtagImpl {
@GET
@Produces("image/jpeg")
@Path("resources/{id}")
public Response getImage(@PathParam("id") String id, @Context Request request) {
ImageDAOImpl imageDAO = new ImageDAOImpl();
Image image = imageDAO.getImage(id);
CacheControl cc = new CacheControl();
cc.setMaxAge(172800); //2 days
Response.ResponseBuilder rb = null;
String lastModified = image.getDateModified().toString();
// EntityTag etag = new EntityTag(imageDAO.getImage(id).hashCode()+"");
EntityTag etag = new EntityTag(lastModified.hashCode()+"");
System.out.println("Writing Response:" + etag);
rb = request.evaluatePreconditions(etag);
if (rb != null)
{
return rb.cacheControl(cc).tag(etag).build();
}
//If rb is null then either it is first time request; or resource is modified
//Get the updated representation and return with Etag attached to it
rb = Response.ok(imageDAO.getImage(id)).cacheControl(cc).tag(etag);
return rb.build();
}
So, ich bin neu in RestEasy, es wird hilfreich sein, um Ideen zu bekommen, um zu gehen in die richtige Richtung
Dank und Grüße,
Ram.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies bedeutet einfach, dass RestEasy nicht wissen, wie Sie auf "convert" - Ihr Bild-Objekt, um den mediatype ("image/jpeg") angegeben werden in der @Produziert annotation.
Standardmäßig gibt es nur eine begrenzte Liste der unterstützten Typen, resteasy können automatisch marshal und unmarshal :
Der einfachste Weg, es zu tun wäre, wenn die Antwort gefüllt mit dem byte-array-Darstellung des Bildes.
Eine andere Möglichkeit wäre, zu schreiben, Sie eigenen MessageBodyWriter, kümmert sich um diese Umwandlung.
Haben Sie einen Blick auf das resteasy-Dokumentation für weitere details http://docs.jboss.org/resteasy/docs/3.0.5.Final/userguide/html/Content_Marshalling_Providers.html