2014-06-15 39 views
10

Tôi sử dụng phiên bản Jersey 1.18.1 (com.sun.jersey), Spring và Java 8. Nếu tôi đặt biểu thức Java 8 Javada trong dịch vụ REST, nó sẽ bị treo. Nếu tôi loại bỏ biểu thức lambda, nó hoạt động.Jersey và Java 8 (biểu thức Lambda)

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

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

} 

tôi sử dụng com.sun.jersey (1.18.1 phiên bản).

Full stacktrace:

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) 

Hãy cho tôi biết làm thế nào để sửa chữa nó.

+1

bản sao có thể có của [Biểu thức Lambda Java 8 trong Dịch vụ REST không hoạt động] (http://stackoverflow.com/quest ions/22917462/java-8-lambda-expression-in-rest-service-not-working) – andersschuller

+2

Có, nhưng giải pháp này không hoạt động. Tôi đã thử nó. – Malahov

+0

@Malahov vì vậy bạn đã thử với Jersey 2.7+ và gặp vấn đề tương tự? – assylias

Trả lời

3

Chúng tôi đã gặp sự cố tương tự. Ngoài ra com.sun.jersey đang được sử dụng.

Sau khi di chuyển sang phiên bản mới nhất (19.1) tất cả đều hoạt động. Vì vậy, chỉ cần nâng cấp lên phiên bản mới nhất.

10

Jersey 1.18 không tương thích với java 8. Họ đã thêm tương thích java 8 kể từ 1,19.

Nếu bạn nhìn vào ghi chú phát hành Jersey 1.19, bạn có thể thấy giới thiệu hỗ trợ jdk8.

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

Trích dẫn các 1,19 tag:

Nhờ @cowwoc bạn có thể chạy các ứng dụng 1.x Jersey trên JDK8

Để khắc phục điều này, bạn phải nâng cấp Jersey tới 1,19 hoặc hạ cấp java 8 xuống 7.

Các vấn đề liên quan