[bv-dev] When is a method validated

Emmanuel Bernard emmanuel at hibernate.org
Mon Feb 27 04:05:29 EST 2012


Good analysis and sum up.

On 27 févr. 2012, at 09:52, Hardy Ferentschik wrote:

> Hi,
> 
> I think there are really two view points in this case.
> 
> 1. method centric (Emmanuel's suggestion) 
> The parameters are validated at the moment they are passed to the method (after all interceptors did their work) and the return value 
> gets validated as returned by the method. This could lead to the fact that, if there are interceptors which modify the return value before
> passing it back to the client, return value constraints could be broken (e.g. return null for a non null value)
> 
> 2. client centric (Gunnar's suggestion)
> The parameter validation is again last in the interceptor chain. In this case, however, the return value would be validated after the interceptors
> are run. The benefit is that return value constraints gets validated just before they are returned to the client.
> 
>> From a design by contract point of view I would expect the behavior of #1. Method level validation is about what is passed to a method and 
> directly returned by it. There should be no consideration for interceptors. 
> 
> #2 seems to make more sense from a client perspective, but really which interceptor would modify a return value? Interceptors are good for many
> things, but I definitely would not expect them to change the return value (at most  to throw an exception).
> 
> For that reason and the fact that #1 is symmetric I vote for #1
> 
> --Hardy
> 
> 
> 
> On Feb 27, 2012, at 8:31 AM, Gunnar Morling wrote:
> 
>> Hi,
>> 
>> I agree with respect to parameter validation.
>> 
>> But shouldn't the validation interceptor also run last for return value validation, that is after all interceptors potentially modifying the return value? That way both contracts (pre- and postconditions) are enforced as closest to their clients (method implementation respectively method caller) as possible. Other interceptors generally couldn't rely on the correctness of parameters/return values.
>> 
>> The order would then look like that:
>> 
>> ...
>> validate parameters
>> method call
>> ...
>> validate return value
>> 
>> --Gunnar
>> 
>> Am 26.02.2012 19:28 schrieb "Emmanuel Bernard" <emmanuel at hibernate.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
> https://lists.jboss.org/mailman/listinfo/beanvalidation-dev




More information about the beanvalidation-dev mailing list