example desde cero aprender java jersey jsonp jax-rs resteasy

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 encontrar MessageBodyWriter ( JSONWithPaddingProvider ) ubicado en este JSONWithPaddingProvider