【问题标题】:Does Beanshell supports java 8 streams?Beanshell 是否支持 java 8 流?
【发布时间】:2021-07-09 12:42:50
【问题描述】:

当尝试在 sn-p 下执行迭代 Map 的值时,它会在符号 > 处引发 beanshell 解析异常。有什么办法可以解决这个问题吗?

map.entrySet().stream().forEach(map -> {
    if (map.getValue().stream().anyMatch(s -> groupDN.startsWith(s.toUpperCase()))) {
        return "DONE";
    }
    ;
});

异常运行规则:BeanShell script error: bsh.ParseException: Parse error at line 30, column 22. 遇到:> BSF info: Test_RO at line: 0 column: columnNo

【问题讨论】:

    标签: java stream beanshell sailpoint


    【解决方案1】:

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

    真正要问的是 BeanShell 是否支持编写使用 Streams 的惯用 Java 代码所需的以下 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 的一部分。显然可以嵌入...

    【讨论】:

    • 非常感谢您提供的信息,它真的很有帮助!我必须使用 beanshell,因为我的安全工具不支持 jshell。是的,可能需要等待更新!
    • .... 或者您可以参与 Beanshell 项目以使其尽快实现。或者向您的安全工具供应商施压,要求其采取措施。
    • IIQ 中使用的 Beanshell 版本确实支持泛型,但方式有限。具体来说,它不支持具有多个参数的泛型或菱形语法。所以它将支持<String>,但不支持<String, Object><>。它不支持 lambda 箭头语法或方法引用。但是,您可以使用它支持的匿名类轻松实现任何 lambda。
    【解决方案2】:

    Sailpoint IIQ 8.1 使用 Bsh 2.1.8 jar,这是 2014 年 2 月在 https://code.google.com/archive/p/beanshell2/ 的旧 beanshell 存储库中发布的 beanshell - 这就是所谓的“Beanshell2”

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 2015-12-18
      • 2017-03-25
      • 2014-11-27
      • 2021-03-09
      • 2020-03-26
      • 2016-08-24
      相关资源
      最近更新 更多