[bv-dev] Container element validation for arrays

Matt Benson mbenson at apache.org
Wed Apr 19 10:40:58 EDT 2017


FWIW, I was thinking something along the same lines as Michael.

Matt

On Wed, Apr 19, 2017 at 9:35 AM, Michael Nascimento <misterm at gmail.com>
wrote:

> Hi Gunnar,
>
> In order to preserve compatibility, I think we should require a specific
> option to be set in the factory to enable array element validation. This
> way, new projects have full support. What do you think?
>
> Regards,
> Michael
>
> On Wed, Apr 19, 2017 at 9:04 AM, Gunnar Morling <gunnar at hibernate.org>
> wrote:
>
>> 2017-04-19 13:46 GMT+02:00 Emmanuel Bernard <emmanuel at hibernate.org>:
>> > What you are inferring is that the JLS made an incompatible move right?
>> > Because before Java 8, @Size(max=5) String[] was meant to be applied on
>> > the array right?
>>
>> It's not incompatible. Before, there were no TYPE_USE annotations. But
>> now, an annotation can be both at the same time:
>>
>>     "It is possible for @Foo to be both a declaration annotation and a
>> type annotation simultaneously."
>>
>> The thing is that we added TYPE_USE as supported element type for all
>> built-in annotations, so we now cannot tell apart whether that @Email
>> is meant as field-level constraint (targeting the array) or as type
>> annotation (targeting the component type). A new constraint annotation
>> member or defined payload could be used to provide that information,
>> but I'd prefer implementations to experiment with that first.
>>
>> >
>> > Anyways, I don't think that would be a massive loss to lose array
>> > support but my background is biased toward preferring collections.
>>
>> Yes, my thinking, too. It should be possible to add later, though. In
>> that light spending the cycles on array support wasn't for nothing,
>> e.g. we found names ("container element constraints") which will work
>> for both usages down the road.
>>
>> >
>> > Emmanuel
>> >
>> > On Wed 17-04-19 10:27, Gunnar Morling wrote:
>> >>Hi,
>> >>
>> >>Guillaume made an important observation concerning the validation of
>> >>array elements. So far we envisioned to support this:
>> >>
>> >>    String @Email [] emails;
>> >>
>> >>That looks nice (provided that @Email supports TYPE_USE), only that
>> >>it's getting semantics of type annotations for arrays wrong.
>> >>
>> >>As per the JLS [1], the @Email annotation here applies to the array
>> >>type String[], not the component type String. This example from the
>> >>JLS clarifies the intent:
>> >>
>> >>    @C int @A [] @B [] f;
>> >>
>> >>    "@A applies to the array type int[][], @B applies to its component
>> >>type int[],
>> >>    and @C applies to the element type int."
>> >>
>> >>So according to that, our example would have to be:
>> >>
>> >>    @Email String[] emails;
>> >>
>> >>But obviously this conflicts with the existing semantics of applying
>> >>constraints to arrays (not their elements) in BV 1.1.
>> >>
>> >>So based on that, I don't see a good way for supporting container
>> >>element constraints for arrays. Hence my suggestion is to not support
>> >>them in the BV 2.0 spec (the validation of container elements of
>> >>generic containers - List<@Email String> - is not affected). Specific
>> >>implementations may explore ways around it (e.g. specifying the target
>> >>via payload()) and we may revisit it in 2.1.
>> >>
>> >>Any thoughts?
>> >>
>> >>--Gunnar
>> >>
>> >>[1] https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.
>> html#jls-9.7.4
>> >>_______________________________________________
>> >>beanvalidation-dev mailing list
>> >>beanvalidation-dev at lists.jboss.org
>> >>https://lists.jboss.org/mailman/listinfo/beanvalidation-dev
>> > _______________________________________________
>> > beanvalidation-dev mailing list
>> > beanvalidation-dev at lists.jboss.org
>> > https://lists.jboss.org/mailman/listinfo/beanvalidation-dev
>> _______________________________________________
>> beanvalidation-dev mailing list
>> beanvalidation-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/beanvalidation-dev
>>
>
>
> _______________________________________________
> beanvalidation-dev mailing list
> beanvalidation-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/beanvalidation-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/beanvalidation-dev/attachments/20170419/6bc7035c/attachment-0001.html 


More information about the beanvalidation-dev mailing list