On 15 Jan 2013, at 7:56 PM, Gunnar Morling <gunnar(a)hibernate.org> wrote:
As you know we're likely going to exclude getter methods from
method validation by default
:-(
The question is now how this configuration should look like and where
it should be described. I think there is two separate components here:
1) BV which provides the logic/engine for performing method validation
2) Technologies integrating the method validation feature, e.g. CDI, Spring etc. For CDI,
the behavior of this integration is described in the BV spec (section 10.2 [1]) as per the
Java EE conventions. For e.g. Spring, the behavior would be described in the Spring
documentation.
Regarding the configuration of including/excluding getters, one option would be to define
a BV-specific mechanism for the configuration of (e.g. a global option in validation.xml
and/or an annotation like @ValidateOnCall). This mechanism would have to be queried by the
technologies integrating with method validation.
Alternatively, whether to include/exclude getters could be part of the configuration of
2). For CDI, this might e.g. happen by adding an attribute "validateGetters()"
to the interceptor binding annotation triggering method validation, while e.g. Spring
users might define an appropriate point cut expression matching all those methods they
want to validate. For CDI we would again describe the exact means in section 10.2 of the
BV spec.
But this would still mean that there is an option in BV to turn on/off the validation of
getters, right? Or do you suggest that BV is actually agnostic of which type of method it
validates and it is the integration framework which is responsible for excluding getters.
Personally I'd favor the latter approach for the following
reasons:
* The configuration of which methods to intercept is IMO a natural responsibility of
integrating technologies
* Integrating technologies already define mechanisms for handling things like inheritance
of metadata (e.g. configuration given on super-types), resolving conflicts of global vs.
local metadata etc. It makes sense to reuse these mechanisms instead of defining
alternative rules in the BV spec.
Sounds interesting.
--Hardy