Джерси и 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) все работает. Поэтому просто обновите версию до последней версии.