如果我将一个Java 8 Lambda表达式放在REST服务中,它就会崩溃.如果我删除lambda表达式,它的工作原理.如果我使用lambda表达式并不重要.只是存在lambda足以崩溃.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);
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的代码中可以看出,只有lambda表达式的存在才会导致失败.一旦我删除lambda,它工作正常.其他Java 8的东西很好(例如,"Predicate"输入参数).
我得到的错误消息是: java.lang.ArrayIndexOutOfBoundsException:25980
我已经在使用Java 8的Tomcat 7和8上尝试了这个.我正在使用来自JavaEE 6的标准jax-rs ...换句话说我的POM文件有:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.谢谢.
确切的错误消息(在Glassfish 4.0上......我尝试过Tomcat和Glassfish)是:
java.lang.ArrayIndexOutOfBoundsException:52264 at org.objectweb.asm.ClassReader.readClass(ClassReader.java:2015)atg.objectweb.asm.ClassReader.accept(ClassReader.java:469)at org.objectweb.asm.ClassReader.接受(ClassReader.java:425)org.glassfish.hk2.classmodel.reflect.Parser $ …