我使用 Jersey 版本 1.18.1 (com.sun.jersey)、Spring 和 Java 8。如果我将 Java 8 Lambda 表达式放入 REST 服务中,它会崩溃。如果我删除 lambda 表达式,它将起作用。
@Service
@Path("/hello")
public class Hello {
@GET
public String hello() {
new ArrayList<String>().stream().filter((str) -> str.length() > 0);
return "hello";
}
}
我使用的是 com.sun.jersey(1.18.1 版本)。
完整的堆栈跟踪:
SEVERE: Allocate exception for servlet jersey-serlvet java.lang.ArrayIndexOutOfBoundsException: 52264
at jersey.repackaged.org.objectweb.asm.ClassReader.readClass(ClassReader.java:1976)
at jersey.repackaged.org.objectweb.asm.ClassReader.accept(ClassReader.java:464)
at jersey.repackaged.org.objectweb.asm.ClassReader.accept(ClassReader.java:420)
at com.sun.jersey.spi.scanning.AnnotationScannerListener.onProcess(AnnotationScannerListener.java:138)
at com.sun.jersey.core.spi.scanning.uri.FileSchemeScanner$1.f(FileSchemeScanner.java:86)
at com.sun.jersey.core.util.Closing.f(Closing.java:71)
请告诉我如何修复它。
最佳答案
Jersey 1.18 与 java 8 不兼容。他们从 1.19 开始添加了 java 8 兼容性。
如果你看一下 Jersey 1.19 发行说明,你可以看到引入了 jdk8 支持。
https://github.com/jersey/jersey-1.x/releases/tag/1.19
引用 1.19 标签:
Thanks to @cowwoc you're able to run Jersey 1.x applications on JDK8
要解决此问题,您必须将 Jersey 升级到 1.19 或将 java 8 降级到 7。
关于java - Jersey 和 Java 8(Lambda 表达式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24232784/