[bv-dev] Ordered Validation (practically)

Cemo cemalettin.koc at gmail.com
Tue Jan 3 15:33:23 EST 2012


Hi experts,

After reading your comments and mail list I realized that it will be better
share our opinions here about our problems.

First, I would like to thanks all of you to provide such an elegant library
and spec. After latest improvements at spring side, I am sure that bean
validation will be defacto validation framework among java community.

The only problem We are facing is that ordered validations.

In a common sense validation such this can be feasible:

public class AccountBean {
>
>    @CheapValidation(groups=Name1.class)
>    @ExpensiveValidation(groups=Name2.class)
>    @VeryExpensiveValidation(groups=Name3.class)
>    String name;
>
>    @CheapValidation(groups=Surname1.class)
>    @ExpensiveValidation(groups=Surname2.class)
>    @VeryExpensiveValidation(groups=Surname3.class)
>    String surname;
>
>    public interface Name1 {}
>    public interface Name2 {}
>    public interface Name3 {}
>    @GroupSequence({Name1.class, Name2.class, Name3.class})
>    public interface Name {}
>
>    public interface Surname1 {}
>    public interface Surname2 {}
>    public interface Surname3 {}
>    @GroupSequence({Surname1.class, Surname2.class, Surname3.class})
>    public interface Surname {}
> }
>
>

There is two common usage for this. The first usage: some validations are
expensive that should be runned if all validations pass. Another usage is
for each field there should be one violation. For email, if it is empty,
uniqueEmail constraint must not be checked. I hope that how much necessary
it is for us you can imagine. Almost all fields has such restrictions.
Ordering and shortcutting are crucial for us.

But just to provide validation order and shortcut GroupSequence is
practically  impossible to use at enterprice level. For each field again
and again we are declaring interfaces. It is not only intuitive but also
seems ugly. By the way what is came to my mind is for each constraint,
declaring a order like this:

public class AccountBean {
>
>    @CheapValidation(order=0,groups=Name1.class)
>    @ExpensiveValidation(order=1,groups=Name2.class)
>    @VeryExpensiveValidation(order=2,groups=Name3.class)
>    String name;
>
>    @CheapValidation(order=0,groups=Surname1.class)
>    @ExpensiveValidation(order=1,groups=Surname2.class)
>    @VeryExpensiveValidation(order=2,groups=Surname3.class)
>    String surname;
> }
>
>
Default value for ordering might be same for all constraints.

Please help community. :)

Thanks & happy new year
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/beanvalidation-dev/attachments/20120103/d5bc06da/attachment.html 


More information about the beanvalidation-dev mailing list