[bv-dev] Value extraction - how to obtain the validated type for non-generic wrappers?

Emmanuel Bernard emmanuel at hibernate.org
Thu Mar 23 11:39:50 EDT 2017

It’s interesting.
How does that work when Ceylon decides to go for a native support instead of the extraction model? Can they keep a mix?
I.e. do we prioritize the actual ConstraintViolation<Min,ceylon.language.Integer> over a ValueExtractor<@ExtractedValue ceylon.language.Integer> + ConstraintViolation<Min,Integer>
I see that you used @UnwrapByDefault, my concern comes from that.

BTW it will mandate nested extractor support.

> On 23 Mar 2017, at 03:52, Gunnar Morling <gunnar at hibernate.org> wrote:
> Hi,
> I've received some very interesting feedback on the value extraction
> proposal from our team working on the Ceylon language.
> Ceylon does not only have its own collection framework, but also
> custom numeric wrappers, e.g. ceylon.language.Integer. Of course it'd
> be desirable to be able to apply existing constraints such as @Min to
> these. Instead of creating custom implementations such as
> ConstraintValidator<Min, ceylon.language.Integer> we thought value
> extractors could be used to enable all the existing constraints and
> validators:
>    @UnwrapByDefault
>    public class IntegerValueExtractor implements
>                 ValueExtractor<@ExtractedValue ceylon.language.Integer> {
>        public void extractValues(
>            ceylon.language.Integer originalValue, ValueReceiver receiver) {
>            receiver.value( null, originalValue.getValue() );
>       }
>    }
> The problem only is that BV cannot derive the wrapped type
> (java.lang.Integer) from the annotated extracted value type
> (ceylon.language.Integer) in this case, as it isn't generic.
> My question is: should we support this use case? If so, how? One
> option I can see is allowing to specify the wrapped type explicitly if
> the wrapper is non-generic:
>    public class IntegerValueExtractor implements
>        ValueExtractor<@ExtractedValue(type=int.class)
> ceylon.language.Integer> {
>        ...
>    }
> type() would have a default value of void.class, so it doesn't have to
> be specified if the wrapped type can be derived.
> We also could decide to not support, requiring integrators such as
> Ceylon to declare their own constraint validators for BV built-in
> constraints, but obviously that'd fall short when it comes to
> 3rd-party custom constraints for basic Java datatypes.
> Thoughts?
> --Gunnar
> _______________________________________________
> beanvalidation-dev mailing list
> beanvalidation-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/beanvalidation-dev

More information about the beanvalidation-dev mailing list