[bv-dev] Method validation - cont'd
Emmanuel Bernard
emmanuel at hibernate.org
Tue May 15 12:09:33 EDT 2012
On 15 mai 2012, at 16:19, Matt Benson wrote:
> On Tue, May 15, 2012 at 3:28 AM, Hardy Ferentschik <hardy at hibernate.org> wrote:
>>
>> On May 14, 2012, at 5:18 PM, Matt Benson wrote:
>>>>> * Should method validation methods be defined on j.v.Validator or a
>>>>> dedicated new interface?
>>>>
>>>> Should be on javax.validation.Validator
>>>
>>> Destroying backward compatibilty? Not such a big deal for full-blown
>>> implementations, perhaps, but what about interoperability libraries
>>> that may, for whatever reason, implement javax.validation.Validator?
>>> Shouldn't a user be able to upgrade to a Bean Validation 1.1
>>> implementation and still use libraries built against Bean Validation
>>> 1.0?
>>
>> I think the interoperability library case is really hypothetical. Do you know
>> of a single such case? I think it is natural that as a specification evolves no
>> methods get added to interfaces. It is a different story to change existing
>> methods since this will break existing clients, but adding new functionality
>> is ok imo.
>>
>
> WRT the "naturalness" of an interface's evolution, seemingly this is
> thought of at least by some as a problem, hence:
> - http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v3.pdf
>
> With Java SE 8 as a dependency I'd give you no argument. But at least
> one member of the EG belongs to another EG that AFAIK strives
> zealously for backward compatibility. I'm thinking of Ed Burns and
> JSF.
Even when Java 8 will be there, I don't see defender methods as really solving the problem.
Yes it will give a sense of false safety by not exploding. But what can a spec do to implement
say method validation in a defender method? Besides throwing a NotImplementedException,
not much.
I'm tempted to say that a clean cut is better in some situations. Especially int he adapter business
where the adapter would simply not delegate to the rightful implementation for new methods.
>
> Custom Validator implementations that *would not* break because they
> inherit from org.apache.bval.jsr303.ClassValidator:
> - http://svn.apache.org/repos/asf/bval/sandbox/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/DynamicClassValidator.java
> - http://svn.apache.org/repos/asf/bval/sandbox/bval-jsr303-dynamic/provider/src/main/java/org/apache/bval/jsr303/dynamic/NestedValidator.java
>
> Custom Validator implementations that *would* break due to their being
> directly implemented:
> - http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/validation/beanvalidation/SpringValidatorAdapter.html
> - http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/validation/beanvalidation/CustomValidatorBean.html
Right, the approach I like is tougher on people whose business is adapting classes ;)
More information about the beanvalidation-dev
mailing list