[
https://issues.apache.org/jira/browse/BVAL-82?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13249184#comment-13249184
]
Matt Benson commented on BVAL-82:
---------------------------------
Rather than merging info from superclass/interface methods into the descriptor,
it could be easier to simply traverse the whole hierarchy and process method
validation metadata from separate types in multiple passes. In any event the
next version of the spec will contain method validation so we should be
steering in that direction. Let's defer the issue beyond 0.4.
> Validation of inherited methods causes ValidationException
> ----------------------------------------------------------
>
> Key: BVAL-82
> URL: https://issues.apache.org/jira/browse/BVAL-82
> Project: BVal
> Issue Type: Bug
> Components: method validation
> Affects Versions: 0.1-incubating, 0.2-incubating, 0.3-incubating, 0.4
> Reporter: Daniel Drachau
> Assignee: Mohammad Nour
> Fix For: 0.5
>
>
> MethodValidationImpl throws an exception if it tries to verify an inherited
> method (definition in the abstract superclass).
> public <T> Set<ConstraintViolation<T>> validateParameter(Class<T> clazz,
> Method method,
> Object parameter,
> int parameterIndex,
> Class<?>...
> groupArray) {
> MethodBeanDescriptorImpl beanDesc =
> (MethodBeanDescriptorImpl) getConstraintsForClass(clazz);
> MethodDescriptorImpl methodDescriptor =
> (MethodDescriptorImpl) beanDesc.getConstraintsForMethod(method);
> if ( methodDescriptor == null ) {
> --> throw new ValidationException("Method " + method + " doesn't
> belong to class " + clazz);
> }
> a possible fix might be to collect the method declarations of the parent
> classes as well (in the MethodValidatorMetaBeanFactory). I cannot decide if
> this really fix the problem or just one symptom.
> private void buildMethodConstraints(MethodBeanDescriptorImpl beanDesc)
> throws InvocationTargetException, IllegalAccessException {
> beanDesc.setMethodConstraints(new HashMap<Method, MethodDescriptor>());
> ### new ###
> ArrayList<Method> methods = new ArrayList<Method>();
> for (Method m :
> beanDesc.getMetaBean().getBeanClass().getDeclaredMethods()) {
> methods.add(m);
> }
> Class clazz = beanDesc.getMetaBean().getBeanClass();
> while (clazz.getSuperclass() != null) {
> clazz = clazz.getSuperclass();
> for (Method m : clazz.getDeclaredMethods()) {
> methods.add(m);
> }
> }
> for (Method method : methods) {
> ### end new ###
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira