[bv-dev] Container element validation for arrays
misterm at gmail.com
Wed Apr 19 10:35:12 EDT 2017
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?
On Wed, Apr 19, 2017 at 9:04 AM, Gunnar Morling <gunnar at hibernate.org>
> 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:
> >>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 , 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?
> >> https://docs.oracle.com/javase/specs/jls/se8/html/jls-
> >>beanvalidation-dev mailing list
> >>beanvalidation-dev at lists.jboss.org
> > _______________________________________________
> > 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
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the beanvalidation-dev