desde - fetch javascript example
No se pudo encontrar MessageBodyWriter para el objeto de respuesta de tipo: com.sun.jersey.api.json.JSONWithPadding del tipo de medio: application/x-javascript (2)
Estoy tratando de usar jsonp en mi aplicación de red troncal. En mi servicio web, intento usar la biblioteca de Jersey para usar la respuesta JSONWithPadding.
El problema es que parece que la "aplicación / x-javascript" no es compatible.
Mi código es:
@GET
@Path("/issues/jsonp")
@Produces("application/x-javascript")
public JSONWithPadding getIssuesJsonp(@Context HttpServletRequest req,
@PathParam("ppid") String qppid,
@QueryParam("callback") String callback) {
Principal principal = req.getUserPrincipal();
String username = principal.getName();
try {
List<IssueDTO> list = service.getIssuesDTO(username, qppid);
IssuesResult r = new IssuesResult();
r.setIssues(list);
System.out.println("CALLBACK:" + callback);
return new JSONWithPadding(r,callback);
} catch (Exception e) {
String message = "Internal Server Error";
LOG.error(message, e);
Result r = new Result(PPStatusCode.INTERNAL_SERVER_ERROR, message);
return new JSONWithPadding(noCache(500, r),callback);
}
}
Y el resultado es:
Etat HTTP 500 - No se pudo encontrar MessageBodyWriter para el objeto de respuesta de tipo: com.sun.jersey.api.json.JSONWithPadding del tipo de medio: application / javascript
Alguien me puede ayudar ?
Editar: la pila completa:
18: 52: 33,243 WARN [org.jboss.resteasy.core.SynchronousDispatcher] (http - 127.0.0.1-8080-1) Error al ejecutar GET pp / fn / issues / jsonp: org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: No se pudo encontrar MessageBodyWriter para el objeto de respuesta de tipo: com.sun.jersey.api.json.JSONWithPadding del tipo de medio: application / x-javascript en org.jboss.resteasy.core.ServerResponse.writeTo (ServerResponse.java:216) [ resteasy-jaxrs-2.3.2.Final.jar:] en org.jboss.resteasy.core.SynchronousDispatcher.writeJaxrsResponse (SynchronousDispatcher.java:585) [resteasy-jaxrs-2.3.2.Final.jar:] en org.jboss .resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher.java:506) [resteasy-jaxrs-2.3.2.Final.jar:] en org.jboss.resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher.java:119) [resteasy -jaxrs-2.3.2.Final.jar:] en org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service (ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.2.Final.jar:] en org.jboss.resteasy.plugins.s erver.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.2.Final.jar:] en org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:50 ) [resteasy-jaxrs-2.3.2.Final.jar:] en javax.servlet.http.HttpServlet.service (HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar: 1.0 .0.Final] en org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] en org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain) .java: 248) [jbossweb-7.0.13.Final.jar:] en org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] en org .apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] en org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:489) [jbossweb -7.0.13.Final.jar:] en org.jboss.as.jpa.interce ptor.WebNonTxEmCloserValve.invoke (WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar: 7.1.1.Final] en org.jboss.as.web.security.SecurityContextAssociationValve.invoke (SecurityContextAssociationValve. java: 153) [jboss-as-web-7.1.1.Final.jar: 7.1.1.Final] en org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:155) [jbossweb-7.0.13 .Final.jar:] en org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] en org.apache.catalina.core.StandardEngineValve.invoke ( StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] en org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] en org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] en org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:671 ) [jbossweb-7.0.13.Final.jar:] en org.apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpo) int.java:930) [jbossweb-7.0.13.Final.jar:] en java.lang.Thread.run (Thread.java:722) [rt.jar: 1.7.0_11]
Alan
Además, RestEasy ya tiene el intérprete JacksonJsonpInterceptor
: si usa Guice con RestEasy, puede bind(JacksonJsonpInterceptor.class)
en un módulo apropiado; de lo contrario, deberá configurarlo como normal para RestEasy (consulte https://docs.jboss.org/ resteasy / docs / 1.1.GA / userguide / html / Interceptors.html sección 29.6):
se pueden enumerar en el contexto-parámetro resteasy.providers en web.xml o se pueden devolver como una clase u objeto en el método Application.getClasses () o Appication.getSingletons ().
Basado en stacktrace, parece que Resteasy provisto en JBoss no puede encontrar JSONWithPaddingProvider
de jersey-json.jar
que usted (supongo) ha incluido en su WAR. JSONWithPadding
es una clase específica de Jersey y, si quieres usarlo, tienes 2 opciones:
- agregue las libs de Jersey a su WAR (si no las tiene allí) y deshabilite Resteasy en
web.xml
como se describe en Implementación de una aplicación web de Jersey en Jboss AS 7 para asegurarse de que su aplicación utilice Jersey como implementación JAX-RS - agregue
jersey-json.jar
a la ruta de clase JBoss para que Resteasy pueda encontrarMessageBodyWriter
(JSONWithPaddingProvider
) ubicado en esteJSONWithPaddingProvider