bval-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Drachau (JIRA)" <j...@apache.org>
Subject [jira] Created: (BVAL-82) Validation of inherited methods causes ValidationException
Date Tue, 07 Sep 2010 14:22:34 GMT
Validation of inherited methods causes ValidationException
----------------------------------------------------------

                 Key: BVAL-82
                 URL: https://issues.apache.org/jira/browse/BVAL-82
             Project: BeanValidation
          Issue Type: Bug
          Components: jsr303
    Affects Versions: 0.2-incubating, 0.1-incubating
            Reporter: Daniel Drachau
             Fix For: 0.3-incubating


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.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message