解决:org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException:HV000232:找不到语言“javascript”的 JSR 223 脚本引擎

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

我在使用 Java 17 时遇到 Hibernate Validator 6.2.3 的问题。当尝试使用 org.hibernate.validator.constraints.ScriptAssert 验证实体时,我收到以下错误:

Caused by: org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException: HV000232: No JSR 223 script engine found for language "javascript".
    at org.hibernate.validator.internal.engine.scripting.DefaultScriptEvaluatorFactory.createNewScriptEvaluator(DefaultScriptEvaluatorFactory.java:66)
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
    at org.hibernate.validator.spi.scripting.AbstractCachingScriptEvaluatorFactory.getScriptEvaluatorByLanguageName(AbstractCachingScriptEvaluatorFactory.java:41)
    at org.hibernate.validator.internal.engine.constraintvalidation.HibernateConstraintValidatorInitializationContextImpl.getScriptEvaluatorForLanguage(HibernateConstraintValidatorInitializationContextImpl.java:50)
    at org.hibernate.validator.internal.constraintvalidators.hv.AbstractScriptAssertValidator.initialize(AbstractScriptAssertValidator.java:38)

@ScriptAssert(lang=, script=, alias=, reportOn=)

检查给定的脚本是否可以成功评估 带注释的元素。为了使用这个约束, JSR 223 定义的 Java Scripting API 的实现 (“Java™ 平台脚本”)必须是类的一部分 小路。要计算的表达式可以用任何脚本编写 或表达式语言,JSR 223 兼容引擎可以是 在类路径中找到。尽管这是一个类级别的限制, 可以使用reportOn属性来报告约束违规 特定属性而不是整个对象。

JSR 223 API 的标准实现是什么?

任何见解或指导将不胜感激。谢谢!

java hibernate-validator jsr223
1个回答
0
投票

Nashorn(内置 JDK javascript 引擎)在 JDK 11 中已弃用,并在 JDK 15 中删除:https://openjdk.org/jeps/372

因此,尝试在 JDK 17 上使用

@ScriptAssert
会导致您看到的异常。您可以尝试添加https://github.com/openjdk/nashorn:

<dependency>
    <groupId>org.openjdk.nashorn</groupId>
    <artifactId>nashorn-core</artifactId>
    <version>15.4</version>
</dependency>

或者,您可以尝试切换到不同的脚本语言,例如 Groovy:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-jsr223</artifactId>
    <version>3.0.20</version>
</dependency>

但在这种情况下,您需要更新验证脚本字符串。

顺便说一句,在(添加依赖项)时,您可能需要考虑升级到 Hibernate Validator 8.0(它切换到 jakarta.* API)

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