簡體   English   中英

無法為類型的響應對象找到MessageBodyWriter:com.sun.jersey.api.json.JSONWithPadding媒體類型:application / x-javascript

[英]Could not find MessageBodyWriter for response object of type: com.sun.jersey.api.json.JSONWithPadding of media type: application/x-javascript

我正在嘗試在我的骨干應用程序上使用jsonp。 在我的webservice中,我正在嘗試使用Jersey庫來使用JSONWithPadding響應。

問題是,看起來不支持“application / 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

有人能幫我嗎 ?

編輯:完整的堆棧跟蹤:

18:52:33,243 WARN [org.jboss.resteasy.core.SynchronousDispatcher](http - 127.0.0.1-8080-1)執行GET失敗pp / fn / issues / jsonp:org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure:無法為類型的響應對象找到MessageBodyWriter:com.sun.jersey.api.json.JSONWithPadding媒體類型:application / x-javascript at 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:] at 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:] at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)[resteasy-jaxrs-2.3.2.Final.jar:] at org.jboss.resteasy.plugins.s erver.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)[resteasy-jaxrs-2.3.2.Final.jar:] at 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] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)[jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain .java:248)[jbossweb-7.0.13.Final.jar:] org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)[jbossweb-7.0.13.Final.jar:] at org .apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)[jbossweb-7.0.13.Final.jar:] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:489)[jbossweb -7.0.13.Final.jar:]在org.jboss.as.jpa.interce ptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)[jboss-as-jpa-7.1.1.Final.jar:7.1.1.Final] at 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:] at 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:] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)[jbossweb-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(JIoEndpo) int.java:930)[jbossweb-7.0.13.Final.jar:] java.lang.Thread.run(Thread.java:722)[rt.jar:1.7.0_11]

艾倫

基於它看起來像在JBoss中提供RestEasy的堆棧跟蹤無法找到JSONWithPaddingProviderjersey-json.jar ,你有(我想)在你的戰爭捆綁在一起。 JSONWithPadding是Jersey特定的類,如果你想使用它,你有2個選擇:

  • 將Jersey庫添加到WAR中(如果您還沒有它們)並在web.xml禁用Resteasy,如在Jboss AS 7上部署Jersey webapp中所述,以確保您的應用程序使用Jersey作為JAX-RS實現
  • jersey-json.jar添加到JBoss類路徑中,以便Resteasy能夠找到位於此jar中的MessageBodyWriterJSONWithPaddingProvider

RestEasy也已經有了JacksonJsonpInterceptor - 如果你在JacksonJsonpInterceptor中使用Guice,你可以在適當的模塊中bind(JacksonJsonpInterceptor.class) ,否則你應該將它配置為正常的RestEasy(參見https://docs.jboss.org/ resteasy / docs / 1.1.GA / userguide / html / Interceptors.html第29.6節):

它們可以在web.xml中的resteasy.providers context-param中列出,也可以作為Application.getClasses()或Appication.getSingletons()方法中的類或對象返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM