【发布时间】:2017-01-06 10:29:39
【问题描述】:
以下无辜的 API 调用会导致整个 Jersey Web 应用程序崩溃。
@Path("/sortlist")
public class SortList {
@GET
public void sort() {
List<Dog> test = new ArrayList<>();
test.add(new Dog("test"));
test.add(new Dog("blah"));
test.sort(Comparator.comparing(Dog::getName));
}
class Dog {
private String name;
public String getName() { return name; }
public Dog(String name) { this.name = name; }
}
}
它抛出
javax.servlet.ServletException: Servlet.init() for servlet jersey-serlvet threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614)
root cause
java.lang.ArrayIndexOutOfBoundsException: 20343
org.objectweb.asm.ClassReader.<init>(Unknown Source)
但是为什么呢?即使同步排序操作也没有效果。这可能是以下技术之一中的错误吗?你能复制这个问题吗?
- Tomcat 7.0.73
- 球衣 1.19.3
- 码头 9.4.0.v20161208
- ASM 5.0.4
【问题讨论】:
-
嗯,堆栈跟踪看起来像是
ClassReader的构造函数中的异常,而不是您的类...是什么让您认为它与您的sort()方法有关? -
由于这个方法单独使应用程序崩溃,没有别的。显然,Jersey 对 Java 8 的支持不够好。我已经在下面发布了我的解决方案。
标签: java tomcat collections jersey jetty