Джерси и Java 8 (лямбда-выражение)

Я использую Джерси версии 1.18.1 (com.sun.jersey), Spring и Java 8. Если я добавляю лямбда-выражение Java 8 в службу 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)

Пожалуйста, скажите мне, как это исправить.


person Malahov    schedule 15.06.2014    source источник


Ответы (2)


Джерси 1.18 не совместим с java 8. Они добавили совместимость с java 8 с версии 1.19.

Если вы посмотрите примечания к выпуску Джерси 1.19, вы увидите добавленную поддержку jdk8.

https://github.com/jersey/jersey-1.x/releases/tag/1.19

Цитирование тега 1.19:

Благодаря @cowwoc вы можете запускать приложения Jersey 1.x на JDK8.

Чтобы это исправить, вам нужно обновить Jersey до 1.19 или понизить версию Java 8 до 7.

person Federico Piazza    schedule 11.08.2016

У нас была аналогичная проблема. Также используется com.sun.jersey.

После перехода на самую новую версию (19.1) все работает. Поэтому просто обновитесь до последней версии.

person Ziemowit Stolarczyk    schedule 11.08.2016