2014-06-15 17 views
10

Uso la versione Jersey 1.18.1 (com.sun.jersey), Spring e Java 8. Se inserisco un'espressione Lambda Java 8 in un servizio REST, si blocca. Se rimuovo l'espressione lambda, funziona.Jersey e Java 8 (espressione Lambda)

@Service 
@Path("/hello") 
public class Hello { 

    @GET 
    public String hello() { 
     new ArrayList<String>().stream().filter((str) -> str.length() > 0); 
     return "hello"; 
    } 

} 

Io uso com.sun.jersey (1.18.1 versione).

stacktrace completa:

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) 

prego di dirmi come risolvere il problema.

+1

possibile duplicato di [Espressione Lambda Java 8 all'interno del servizio REST non funzionante] (http://stackoverflow.com/quest ioni/22917462/java-8-lambda-expression-within-rest-service-not-working) – andersschuller

+2

Sì, ma questa soluzione non funziona. L'ho provato – Malahov

+0

@Malahov quindi hai provato con Jersey 2.7+ e hai avuto lo stesso problema? – assylias

risposta

3

Abbiamo avuto un problema simile. Anche com.sun.jersey in uso.

Dopo la migrazione alla versione più recente (19.1), tutto funziona. Quindi, semplicemente, per favore aggiorna alla versione più recente.

10

Jersey 1.18 non è compatibile con java 8. Hanno aggiunto la compatibilità con java 8 dalla 1.19.

Se date un'occhiata alle note di rilascio di Jersey 1.19, potete vedere l'introduzione del supporto jdk8.

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

Citando il tag 1.19:

Grazie a @cowwoc siete in grado di eseguire le applicazioni 1.x Jersey su JDK8

Per risolvere questo problema è necessario l'aggiornamento Da Jersey a 1.19 o downgrade java da 8 a 7.