2013-03-25 3 views
3

Я пытаюсь использовать jsonp на моем базовом приложении. В моем веб-сервисе я пытаюсь использовать библиотеку Джерси для использования ответа JSONWithPadding.Не удалось найти MessageBodyWriter для объекта-ответчика типа: com.sun.jersey.api.json.JSONWithPadding типа носителя: application/x-javascript

Проблема в том, что «приложение/x-javascript» не поддерживается.

Мой код:

@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); 
} 
} 

И результат:

Etat HTTP 500 - Не удалось найти MessageBodyWriter для объекта ответа типа: com.sun.jersey.api.json.JSONWithPadding Тип носителя: application/javascript

Может кто-нибудь мне помочь?

Edit: полный StackTrace:

18: 52: 33243 WARN [org.jboss.resteasy.core.SynchronousDispatcher] (HTTP - 127.0.0.1-8080-1) Не выполнение GET с/п/вопросы/JSONP: org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: не удалось найти MessageBodyWriter для объекта ответа типа: com.sun.jersey.api.json.JSONWithPadding типа носителя: приложения/x- javascript на org.jboss.resteasy.core.ServerResponse.writeTo (ServerResponse.java:216) [resteasy-jaxrs-2.3.2.Final.jar:] на org.jboss.resteasy.core.SynchronousDispatcher.writeJaxrsResponse (SynchronousDispatcher.java:585) [Resteasy-jaxrs-2.3.2.Final.jar:] на org.jboss.resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher. java: 506) [resteasy-jaxrs-2.3.2.Final.jar:] at org.jboss.resteasy.core.SynchronousDispatcher.invoke (SynchronousDispatcher.java:119) [resteasy-jaxrs-2.3.2.Final .jar:] в org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service (ServletContainerDispatcher.java:208) [resteasy-jaxrs-2.3.2.Final.jar:] на org.jboss.resteasy .plugins.server.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:55) [resteasy-jaxrs-2.3.2.Final.jar:] на org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service (HttpServletDispatcher.java:50) [resteasy-jaxrs-2.3.2.Final.jar:] в javax.servlet.http.HttpServlet.service (HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar: 1.0.0.Final] в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] в орг. apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.Sta ndardContextValve.invoke (StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:489) [jbossweb-7.0.13 .Final.jar:] в org.jboss.as.jp.interceptor.WebNonTxEmCloserValve.invoke (WebNonTxEmCloserValve.java:50) [jboss-as-jpa-7.1.1.Final.jar: 7.1.1.Final] на org.jboss.as.web.security.SecurityContextAssociationValve.invoke (SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar: 7.1.1.Final] в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java: 155) [jbossweb-7.0.13.Final.jar:] в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] в org.apache.coyote.http11.Http11Processor.process (Http11Processor.java:877) [jbo ssweb-7.0.13.Final.jar:] at org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] at org. apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] на java.lang.Thread.run (Thread.java:722) [ rt.jar: 1.7.0_11]

Алан

+0

Можете ли вы предоставить полную стеклу? –

+0

да, все сделано! – brunettia

ответ

1

на основе StackTrace он выглядит как Resteasy, представленной в JBoss не может найти JSONWithPaddingProvider от jersey-json.jar, которую вы (я полагаю) в комплекте в вашем WAR. JSONWithPadding это Джерси определенный класс, и если вы хотите использовать его у вас есть 2 варианта:

  • добавить Джерси LIBS к вашему WAR (если у вас нет их там уже есть) и отключить Resteasy в web.xml, как описано в Deploying a Jersey webapp on Jboss AS 7 к убедитесь, что ваше приложение использует Джерси в качестве реализации JAX-RS
  • добавить jersey-json.jar путь к классам JBoss так Resteasy способен найти MessageBodyWriter (JSONWithPaddingProvider), расположенный в этом банке
+0

спасибо, мне пришлось добавить его в jboss в мой файл maven. Ницца ! – brunettia

0

Resteasy также имеет JacksonJsonpInterceptor уже - если вы используете Guice с Resteasy, вы можете bind(JacksonJsonpInterceptor.class) в соответствующем модуле, в противном случае вы должны настроить его, как обычно для Resteasy (см https://docs.jboss.org/resteasy/docs/1.1.GA/userguide/html/Interceptors.html раздел 29,6):

они могут быть перечислены в resteasy.providers контекст- param в web.xml или возвращен как класс или объект в методе Application.getClasses() или Appication.getSingletons().

Смежные вопросы