You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@bval.apache.org by "Daniel Drachau (JIRA)" <ji...@apache.org> on 2010/09/07 16:22:34 UTC

[jira] Created: (BVAL-82) Validation of inherited methods causes ValidationException

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.