Does anyone know how to get method validation to run when using Weld and Hibernate Validator? My application should be a standalone application, so I'm not using an application server.

The @NotNull constraint for the method test in my code below is simply ignored.

My code is this:

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>

I'm using Gradle to build; this is my gradle.build with the dependencies:

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"
}

I tried to use the Hibernate Validator CDI which is mentioned in their Getting started guide with "org.hibernate:hibernate-validator-cdi:5.0.2.Final", but this didn't work either.

What am I missing to get method validation to run?

有帮助吗?

解决方案

Solved it by myself: Calling a method in the same class is not treated as a business method invocation and therefore validation doesn't take place. If the invoked method is moved to a separate class which is then injected into the Test class above, it works.

For more, see here: https://community.jboss.org/thread/234467

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top