BeanShell 支持 Java 8 流吗?

问题描述 投票:0回答:2

当尝试执行下面迭代

Map<String,List>
值的代码片段时,它会在符号 > 处抛出 BeanShell 解析异常。我能找到解决这个问题的任何解决方案吗?

map.entrySet().stream().forEach(map -> {
    if (map.getValue().stream().anyMatch(s -> groupDN.startsWith(s.toUpperCase()))) {
        return "DONE";
    }
    ;
});
Exception running rule: BeanShell script error: bsh.ParseException: Parse error at line 30, column 22. Encountered: > BSF info: Test_RO at line: 0 column: columnNo
java java-stream beanshell sailpoint
2个回答
7
投票

Java 8+ Streams 本身实际上“只是”一堆 Java 库类。

您真正在这里问的是 BeanShell 是否支持以下 Java 语言功能,这些功能是编写使用 Streams 的惯用 Java 代码所需的:

    Java 5 中的泛型类型,
  • Java 8 中的 lambda 和类型推断。
据我所知,所有这些答案都是“否”。 泛型类型位于 BeanShell 3.0 的路线图上(请参阅

https://github.com/beanshell/beanshell#development-road-map),但未提及 lambda 和类型推断。


如果您想要一个支持所有 Java 语言的交互式 Java REPL,您可能会更好地查看“jshell”,它是从 Java 9 开始的标准 Java SE 的一部分。 显然它可以嵌入...


1
投票
Sailpoint IIQ 8.1 使用 Bsh 2.1.8 jar,这是 2014 年 2 月在旧 beanshell 存储库中发布的 beanshell,网址为

https://code.google.com/archive/p/beanshell2/ - 这就是所谓的《豆壳2》

现在,官方 beanshell 主页位于

https://github.com/beanshell/beanshell/releases,最新版本是 2.1.0(不要问我为什么),于 2020 年 12 月发布。

Java Streams 是在 Java 8 中引入到 Java 语言中的,Java 8 是在 Bsh 2.1.8 发布之后于 2014 年 3 月发布的。

所以答案是,不,Sailpoint IIQ 目前在其 beanshell 代码中不支持 Java Streams。

但是,您仍然可以将 Java 流封装到某个 jar 中,并且您的 beanshell 代码将能够访问使用该 jar 的方法,就像当前对 IIQ Web 应用程序中的所有 jar 所做的那样。当然,缺点是无法动态更改您的 IIQ 规则代码。

2021 年 7 月,Sailpoint 发布了 IIQ 8.2,这个最新版本仍然使用相同的 Bsh 2.1.8 jar。

© www.soinside.com 2019 - 2024. All rights reserved.