使用Weld和Hibernate Validator进行方法验证

时间:2013-12-31 23:14:30

标签: java validation hibernate-validator weld2

有没有人知道如何在使用Weld和Hibernate Validator时运行方法验证?我的应用程序应该是一个独立的应用程序,所以我没有使用应用程序服务器。

以下代码中方法@NotNull的{​​{1}}约束被忽略。

我的代码是:

Test.java

test

的validation.xml

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);
    }
}

我正在使用Gradle来构建;这是带有依赖项的 gradle.build

<?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>

我尝试使用Hibernate Validator CDI,它在入门指南中提到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" } ,但这也不起作用。

我缺少什么才能让方法验证运行?

1 个答案:

答案 0 :(得分:1)

由我自己解决:在同一个类中调用方法不会被视为业务方法调用,因此不会进行验证。如果将调用的方法移动到一个单独的类,然后将其注入上面的Test类,它就可以工作。

有关详情,请参阅此处:https://community.jboss.org/thread/234467