无法启动quarkus:java.lang.ArrayIndexOutOfBoundsException:1

时间:2019-07-18 01:52:15

标签: hibernate-validator quarkus

从QuarkEE工件创建的Quarkus应用程序(0.19.1)无法以以下内容开头:

[io.qua.dev.DevModeMain] Failed to start quarkus: java.lang.ExceptionInInitializerError ..
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at io.quarkus.hibernate.validator.runtime.HibernateValidatorRecorder

编辑 我已经开了一张票: https://github.com/quarkusio/quarkus/issues/3284

1 个答案:

答案 0 :(得分:1)

根本原因是对enum类的静态工厂方法的bean验证约束javax.validation.constraints.NotNull。简化示例:

public enum Gender {
    MALE,
    FEMALE;

    public static Gender fromCode(@NotNull String code) {
        return Gender.valueOf(code);
    }
}

并在pom中具有此依赖性:

    <dependency>
       <groupId>io.quarkus</groupId>
       <artifactId>quarkus-hibernate-validator</artifactId>
    </dependency>

令人困惑的是,简单POJO类上的静态工厂方法有效。

注意 我知道Bean验证规范不支持对静态方法的验证。这只是对IDE的提示。

  

Java EE 8验证构造函数和方法:Bean验证约束可以放置在非静态方法和构造函数的参数上以及非静态方法的返回值上。静态方法和构造函数将不会得到验证。