Если я поставлю выражение Java 8 Lambda в службе REST, он сработает. Если я удалю выражение лямбда, это сработает. Не имеет значения, пользуюсь ли я лямбда-выражением или нет. Просто существование лямбды достаточно для краха. Все, что связано с Java 8, похоже, работает.
Ниже мой код (упрощенный):
@Path("finance")
public class FinanceRest {
@GET
@Produces("text/plain")
public String speak() {
return "Hello world.";
}
private void lambdaFunction(Predicate<Account> predicate) {
// Any lambda will cause problems, no matter how simple
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
Stream<Integer> onlyOdds = numbers.stream().filter(n -> n%2 != 0);
}
}
Как видно из приведенного выше кода, только существование лямбда-выражения вызовет сбой. Как только я удаляю лямбду, она отлично работает. Другой материал Java 8 хорош (например, входной параметр "Предикат" ).
Сообщение об ошибке, которое я получаю: java.lang.ArrayIndexOutOfBoundsException: 25980
Я пробовал это на Tomcat 7 и 8, используя Java 8. Я использую стандартный материал jax-rs из JavaEE 6.... другими словами, у моего POM файла есть следующее:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Любая помощь будет оценена по достоинству. Спасибо.
Точное сообщение об ошибке (на Glassfish 4.0... Я пробовал как Tomcat, так и Glassfish):
java.lang.ArrayIndexOutOfBoundsException: 52264 at org.objectweb.asm.ClassReader.readClass(ClassReader.java:2015) в org.objectweb.asm.ClassReader.accept(ClassReader.java:469) at org.objectweb.asm.ClassReader.accept(ClassReader.java:425) at org.glassfish.hk2.classmodel.reflect.Parser $5.on(Parser.java:362) в com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.handleEntry(ReadableArchiveScannerAdapter.java:165) в com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.onSelectedEntries(ReadableArchiveScannerAdapter.java:127) at org.glassfish.hk2.classmodel.reflect.Parser.doJob(Parser.java:347) в org.glassfish.hk2.classmodel.reflect.Parser.access $300 (Parser.java:67) в org.glassfish.hk2.classmodel.reflect.Parser $3.call(Parser.java:306) в org.glassfish.hk2.classmodel.reflect.Parser $3.call(Parser.java:295) в java.util.concurrent.FutureTask.run(FutureTask.java:266) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:617) в java.lang.Thread.run(Thread.java:744)