REST 服务中的 Java 8 Lambda 表达式不起作用
如果我将 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);
}
}
从上面的代码中可以看出,只要存在 lambda 表达式就会导致失败。一旦我删除了lambda,它就可以正常工作。其他 Java 8 的东西很好(例如,“谓词”输入参数)。
我收到的错误消息是: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>
任何帮助将不胜感激。谢谢。
确切的错误消息(在玻璃鱼4.0上...我尝试过Tomcat和Glassfish)是:
java.lang.ArrayIndexOutOfBoundsException: 52264 at org.objectweb.asm.ClassReader.readClass(ClassReader.java:2015) at 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) at com.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.handleEntry(ReadableArchiveScannerAdapter.java:165) atcom.sun.enterprise.v3.server.ReadableArchiveScannerAdapter.onSelectedEntries(ReadableArchiveScannerAdapter.java:127) at org.glassfish.hk2.classmodel.reflect.Parser.doJob(Parser.java:347) at org.glassfish.hk2.classmodel.reflect.Parser.access$300(Parser.java:67) at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:306) at org.glassfish.hk2.classmodel.reflect.Parser$3.call(Parser.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:744)