Джерси и Java 8 (выражение Lambda)
Я использую версию Джерси версии 1.18.1 (com.sun.jersey), Spring и Java 8. Если я поставлю выражение Java 8 Lambda в службе REST, он сработает. Если я удаляю лямбда-выражение, оно работает.
@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)
Скажите, пожалуйста, как это исправить.
Ответы
Ответ 1
Джерси 1.18 не совместим с java 8. Они добавили java 8 совместимость с 1.19.
Если вы посмотрите на примечания к выпуску Jersey 1.19, вы увидите, как появилась поддержка jdk8.
https://github.com/jersey/jersey-1.x/releases/tag/1.19
Указание тега 1.19:
Благодаря @cowwoc вы можете запускать приложения Джерси 1.x на JDK8
Чтобы исправить это, вам нужно обновить Jersey до 1.19 или перейти на java с 8 до 7.
Ответ 2
У нас была аналогичная проблема. Также используется com.sun.jersey.
После перехода на новую версию (19.1) все работает.
Поэтому просто обновите версию до последней версии.