3

バックボーンアプリケーションでjsonpを使用しようとしています。私のWebサービスでは、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-タイプ:com.sun.jersey.api.json.JSONWithPaddingのメディアタイプ:application/javascriptの応答オブジェクトのMessageBodyWriterが見つかりませんでした

誰かが私を助けることができますか?

編集:完全なスタックトレース:

18:52:33,243警告[org.jboss.resteasy.core.SynchronousDispatcher](http--127.0.0.1-8080-1)GET pp / fn / issues / jsonpの実行に失敗しました:org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure:タイプ:com.sun.jersey.api.json.JSONWithPaddingの応答オブジェクトのMessageBodyWriterが見つかりませんでした。メディアタイプ:application / x-javascript at org.jboss.resteasy.core.ServerResponse.writeTo(ServerResponse.java:216)[ resteasy-jaxrs-2.3.2.Final.jar:] at 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.server.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:] at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)[jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0。最終]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:]atorg。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:] at org.jboss.as.jpa.interceptor .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] at 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:]atorg.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(JIoEndpoint.java:930)[jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:722)[rt.jar:1.7.0_11]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(JIoEndpoint.java:930)[jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:722)[rt.jar:1.7.0_11]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(JIoEndpoint.java:930)[jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:722)[rt.jar:1.7.0_11]util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:930)[jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:722)[rt.jar:1.7。 0_11]util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:930)[jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:722)[rt.jar:1.7。 0_11]

アラン

4

2 に答える 2

1

スタックトレースに基づくと、JBossで提供されているResteasyは、WARにバンドルされているものを(おそらく)見つけることJSONWithPaddingProviderができないようです。ジャージー固有のクラスであり、それを使用する場合は2つのオプションがあります。jersey-json.jarJSONWithPadding

  • WARにJerseyライブラリを追加し(まだ存在しない場合)、JBoss AS7へのJerseyWebアプリケーションのデプロイでweb.xml説明されているようにResteasyを無効にして、アプリケーションがJerseyをJAX-RS実装として使用するようにします。
  • JBossクラスパスに追加jersey-json.jarして、ResteasyがこのjarにあるMessageBodyWriter( )を見つけられるようにしますJSONWithPaddingProvider
于 2013-03-27T09:11:36.503 に答える
0

RestEasyにはJacksonJsonpInterceptorすでに-RestEasyで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()メソッドでクラスまたはオブジェクトとして返すことができます。

于 2015-08-20T21:33:24.830 に答える