vaadin/framework

BeanValidationBinder / BeanValidator / getJavaxBeanValidator().validateValue() does not honor @Valid

Closed this issue · 3 comments

Can't get my @Valid constraints working with binder.writeBean()

public class Person {
    
    @Valid
    private Address address;

}

public class Address {
    
    @NotNull
    private String city;

}

Found this code in BeanValidator:

    @Override
    public ValidationResult apply(final Object value, ValueContext context) {
        Set<? extends ConstraintViolation<?>> violations = getJavaxBeanValidator()
                .validateValue(beanType, propertyName, value);

Hibernate Validation docs state:

@Valid is not honored by validateProperty() or validateValue().

Here is a simple unit test with the plain validation api:

        Person person = new Person();
        Address address = new Address();
        person.setAddress(address);
        
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        // this would work
        //Set<ConstraintViolation<Depot>> constraintViolations = validator.validate(person);

        Set<ConstraintViolation<Depot>> constraintViolations = validator.validateValue(Depot.class, "address", depot.getAddress());
        
        constraintViolations.forEach((cv) -> {
            System.err.println(cv.getPropertyPath() + " " + cv.getMessage());
        });

How to deal with it?
Is it a bug or a necessity to use validateValue() in favour of validate()?

stale commented

Hello there!

It looks like this issue hasn't progressed lately. There are so many issues that we just can't deal them all within a reasonable timeframe.

There are a couple of things you could help to get things rolling on this issue (this is an automated message, so expect that some of these are already in use):

  • Check if the issue is still valid for the latest version. There are dozens of duplicates in our issue tracker, so it is possible that the issue is already tackled. If it appears to be fixed, close the issue, otherwise report to the issue that it is still valid.
  • Provide more details how to reproduce the issue.
  • Explain why it is important to get this issue fixed and politely draw others attention to it e.g. via the forum or social media.
  • Add a reduced test case about the issue, so it is easier for somebody to start working on a solution.
  • Try fixing the issue yourself and create a pull request that contains the test case and/or a fix for it. Handling the pull requests is the top priority for the core team.
  • If the issue is clearly a bug, use the Warranty in your Vaadin subscription to raise its priority.

Thanks again for your contributions! Even though we haven't been able to get this issue fixed, we hope you to report your findings and enhancement ideas in the future too!

stale commented

The issue was automatically closed due to inactivity. If you found some new details to it or started working on it, comment on the issue so that maintainers can re-open it.