我正在尝试在我的骨干应用程序上使用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 - Could not find MessageBodyWriter for response object of type: com.sun.jersey.api.json.JSONWithPadding of media type: 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:[在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:]在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:] at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:248)[jbossweb-7.0.13.Final.jar:] at 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.inter cegor.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] 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:] 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(JIoEnd) point.java:930)[jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:722)[rt.jar:1.7.0_11]
艾伦
2 回答
基于堆栈跟踪,它看起来像JBoss中提供的Resteasy无法从
jersey-json.jar
中找到jersey-json.jar
,你已经(我猜想)捆绑在你的WAR中 .JSONWithPadding
是 Jersey 特定类,如果你想使用它,你有2个选择:将Jersey库添加到您的WAR(如果您还没有它们)并在
web.xml
中禁用Resteasy,如Deploying a Jersey webapp on Jboss AS 7中所述,以确保您的应用程序使用Jersey作为JAX-RS实现将
jersey-json.jar
添加到JBoss类路径中,以便Resteasy能够找到位于此jar中的MessageBodyWriter
(JSONWithPaddingProvider
)RestEasy已经
JacksonJsonpInterceptor
已经 - 如果你使用Guice和RestEasy,你可以bind(JacksonJsonpInterceptor.class)
在一个合适的模块中,否则你应该正常配置RestEasy(见https://docs.jboss.org/resteasy/docs/1.1.GA/userguide/html/Interceptors.html第29.6节):