Валидация метода с помощью Weld и Hibernate Validator

Кто-нибудь знает, как запустить проверку метода при использовании Weld и Hibernate Validator? Мое приложение должно быть автономным, поэтому я не использую сервер приложений.

@NotNull ограничение для метода test в моем коде ниже просто игнорируется.

Мой код такой:

Test.java

package com.example.methodvalidation;

import org.jboss.weld.environment.se.bindings.Parameters;
import org.jboss.weld.environment.se.events.ContainerInitialized;

import javax.enterprise.event.Observes;
import javax.inject.Singleton;
import javax.validation.constraints.NotNull;
import java.util.List;

@Singleton
public class Test {

    public void main(@Observes ContainerInitialized event, @Parameters List<String> parameters) {
        test("Hello method validation");
        test(null);
    }

    public void test(@NotNull String s) {
        System.out.println(s);
    }
}

validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<validation-config
    xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration"
    version="1.1">
    <executable-validation>
        <default-validated-executable-types>
            <executable-type>ALL</executable-type>
        </default-validated-executable-types>
    </executable-validation>
</validation-config>

Я использую Gradle для сборки; это мой gradle.build с зависимостями:

apply plugin: 'java'
apply plugin: 'application'

mainClassName = 'org.jboss.weld.environment.se.StartMain'

repositories {
    mavenCentral()
}

dependencies {
    compile "org.hibernate:hibernate-validator:5.0.2.Final",
            "org.hibernate:hibernate-validator-cdi:5.0.2.Final",
            "org.jboss.weld.se:weld-se:2.1.1.Final",
            "javax.el:javax.el-api:2.2.4",
            "org.glassfish.web:javax.el:2.2.4"
}

Я попытался использовать CDI Hibernate Validator, который упоминается в руководстве по началу работы с "org.hibernate:hibernate-validator-cdi:5.0.2.Final", но это тоже не сработало.

Чего мне не хватает, чтобы запустить проверку метода?

1 ответ

Решение

Решил сам: вызов метода в том же классе не рассматривается как вызов бизнес-метода и, следовательно, проверка не происходит. Если вызванный метод перемещается в отдельный класс, который затем внедряется в класс Test выше, он работает.

Для получения дополнительной информации см. Здесь: https://community.jboss.org/thread/234467

Другие вопросы по тегам