【问题标题】:Requests to REST failing on tomcat在 tomcat 上对 REST 的请求失败
【发布时间】:2018-10-07 21:30:18
【问题描述】:
SEVERE: Allocate exception for servlet Jersey-Servlet
java.lang.ArrayIndexOutOfBoundsException: 9578
    at org.objectweb.asm.ClassReader.readClass(ClassReader.java:2015)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:469)
    at org.objectweb.asm.ClassReader.accept(ClassReader.java:425)
    at org.glassfish.jersey.server.internal.scanning.AnnotationAcceptingListener.process(AnnotationAcceptingListener.java:169)
    at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:883)
    at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:840)
    at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:755)
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1171)
    at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1144)
    at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:299)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:359)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1230)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1174)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:847)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

以下是我用来测试的服务。

@Path("/ping")
public class PingService {
  @GET
  public String respondOK() {
    return "SERVICE OK";
  }
}

我在尝试执行请求时遇到异常。使用 javax.ws.rs-api:2.0, org.glassfish.jersey.core:jersey-server:2.5, Java-8

【问题讨论】:

  • 请添加导致此异常的代码。您可能正在尝试访问不存在的数组元素。
  • @Cecilya 这是我的项目之一,它公开了一些服务,我在部署到 tomcat 时没有看到任何问题。我只是访问我的一项服务(所有服务都发生相同的异常),添加了我正在访问的示例代码。

标签: java tomcat jersey


【解决方案1】:

问题的原因可能是您使用的是 Tomcat 7。 您应该使用最新版本的 Tomcat 8 甚至 Tomcat 9。

当您使用 Lambda 表达式或较新的 Java 字节码以及版本太旧的 asm.jar 时,似乎会发生异常。

您可以在此处找到有关该问题的更多详细信息:

【讨论】:

  • 对于后代:这发生在我身上,因为 maven 依赖项(swagger)在其依赖项树中有一个旧版本的 asm.jar
猜你喜欢
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多