Hey guys, Good analysis, see my comments inline. On 27 sept. 2010, at 12:02, Hardy Ferentschik wrote:
> Hi, > > forwarding this email to hibernate-dev to get some more feedback. > > Here are some of my thoughts. The method level validation is suggested in > Appendix C of the Bean Validation specification. The method signatures there > all return a set of ConstraintViolations. > The question is how binding these signatures are. > > Root bean and property path are indeed questionable for method level > validation. By extending ConstraintViolation you still have to deal with > these values. Maybe instead of > extending we should have a new interface MethodConstraintViolation. > > Emmanuel, do you have some more feedback on what was discussed regarding > appendix C? > > --Hardy > > ------- Forwarded message ------- > From: "Gunnar Morling" <gunnar.morl...@googlemail.com> > To: "Hardy Ferentschik" <hibern...@ferentschik.de> > > while working on method-level validation I wondered how to represent the > failing validation of method parameters. I think > javax.validation.ConstraintViolation in its current form is only partly > suitable for the needs of parameter/return value validation: > > * The concept of property path seems not to fit right. How would the property > path look for a failing parameter constraint? One could come up with > something like "MyBean.MyMethod(String,Int).Parameters[1]" but I can't say > I'd like that MyBean.myMethod(String,Integer, Address)#2.street1 MyBean.myMethod(String,Integer, Address)#return.street1 We can fix the string representation later but could the property Path API support what you want? > * The concept of a root bean does only fit partly. I think one would need a > safe reference to the "root method" and the parameter index. A direct > reference to the class hosting the validated method seems only partly useful > (and could anytimes be retrieved from a Method reference). > > I therefore prototyped this into this direction: > > * Created a MethodConstraintViolation that extends ConstraintViolation by > adding fields the causing method and the parameter index (one surely would > add a flag or something in case of return value validation) The subclass looks like the best approach I can think of. Not a fan of the flag for the return type but I guess that makes sense. parameter index: I wonder if we should introduce an optional named parameter annotation to make things nicer. > * In case a constraint directly at one of a method's parameters fail, > ConstraintViolation#rootBean and propertyPath are null (but method and > parameterIndex are set) you don't have access to the rootBean? In the Java platform, you receive null if you're calling a static method, otherwise you get the object instance. If we want to stay consistent, I think getPropertyPath should return a Path containing a Node describing the method and a node describing the parameter. > * In case a "cascading" constraint fails (meaning in this context, a > parameter is annotated with @Valid and the referenced bean has constraints > itself which in turn fail), method and parameterIndex are set, rootBean and > propertyPath refer to parameter bean itself, *not* the class hosting the > validated method I get where you are going. I wonder if dedicated methods in the new subclass would be better. I would say so. ie a dedicated getParameterValue() > > WDYT, is this the right way to go? Maybe we should brainstorm a bit on IRC? > We can discuss on IRC but when developing BV, I wrote a lot of API prototypes to see which one felt the best. I've just pushed a copy of the API, TCK and Hibernate Validator projects to GitHub which will make it easy to share prototypes. The simplest approach is to create a user account over there and fork. http://github.com/beanvalidation/api http://github.com/beanvalidation/tck http://github.com/emmanuelbernard/hibernate-validator Make sure to create a dedicated branch for each prototype. _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev