[hibernate-issues] [Hibernate-JIRA] Commented: (ANN-511) Two level @Valid annotation doesn't work

Rakesh Kalra (JIRA) noreply at atlassian.com
Thu Dec 21 17:09:04 EST 2006


    [ http://opensource.atlassian.com/projects/hibernate/browse/ANN-511?page=comments#action_25716 ] 

Rakesh Kalra commented on ANN-511:
----------------------------------

Here is an example which works with 3.2.0.ga, but fails with 3.2.1.ga:

<pre>
import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.NotNull;
import org.hibernate.validator.Valid;

public class HibernateValidatorTest {

  public static void main(String[] args){
    // ClassValidator construction fails with 3.2.1.ga.
    ClassValidator<Form> formValidator = new ClassValidator<Form>(Form.class);
    System.out.println("Test Passed");
  }
}

class Form{
  
  private Member member;
  
  @Valid
  public Member getMember(){
    return member;
  }
}

class Member{
  
  private Address address;
  
  @Valid
  public Address getAddress(){
    return address;
  }
}

class Address{
  
  private String city;
  
  @NotNull
  public String getCity(){
    return city;
  }
}
</pre>

Here is the output:

<pre>
INFO: Hibernate Annotations 3.2.1.GA
Exception in thread "main" java.lang.NullPointerException
	at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:142)
	at org.hibernate.validator.ClassValidator.createChildValidator(ClassValidator.java:252)
	at org.hibernate.validator.ClassValidator.initValidator(ClassValidator.java:216)
	at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:149)
	at org.hibernate.validator.ClassValidator.createChildValidator(ClassValidator.java:252)
	at org.hibernate.validator.ClassValidator.initValidator(ClassValidator.java:216)
	at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:134)
	at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:105)
	at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:97)
	at HibernateValidatorTest.main(HibernateValidatorTest.java:9)
</pre>

IMHO, the fix is simply to initialize "reflectionManager" in the ClassValidator constructor.

Regards,
Rakesh

> Two level @Valid annotation doesn't work 
> -----------------------------------------
>
>          Key: ANN-511
>          URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-511
>      Project: Hibernate Annotations
>         Type: Bug

>   Components: validator
>     Versions: 3.2.1
>  Environment: hibernate-annotations 3.2.1.ga
>     Reporter: Rakesh Kalra

>
> Original Estimate: 1 hour
>         Remaining: 1 hour
>
> I have object depth of 3: Form, Member, Address. I get the following exception when initializing ClassValidator:
> java.lang.NullPointerException
>         at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:142)
>         at org.hibernate.validator.ClassValidator.createChildValidator(ClassValidator.java:252)
>         at org.hibernate.validator.ClassValidator.initValidator(ClassValidator.java:216)
>         at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:149)
>         at org.hibernate.validator.ClassValidator.createChildValidator(ClassValidator.java:252)
>         at org.hibernate.validator.ClassValidator.initValidator(ClassValidator.java:216)
>         at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:134)
>         at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:105)
>         at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:97)
>         ...
> This works fine with 3.2.0.ga.
> I think the problem is in the following constructor, where instance level "reflectionManager" is not being initialized.
> 	protected ClassValidator(
> 			XClass beanXClass, ResourceBundle resourceBundle, MessageInterpolator userInterpolator,
> 			Map<XClass, ClassValidator> childClassValidators, ReflectionManager reflectionManager
> 	) {
> 		this.beanClass = reflectionManager.toClass( beanXClass );
> 		this.messageBundle = resourceBundle == null ?
> 				getDefaultResourceBundle() :
> 				resourceBundle;
> 		this.defaultMessageBundle = ResourceBundle.getBundle( DEFAULT_VALIDATOR_MESSAGE );
> 		this.userInterpolator = userInterpolator;
> 		this.childClassValidators = childClassValidators;
> 		initValidator( beanXClass, childClassValidators );
> 	}
> The other constructor initializes reflectionManager.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira




More information about the hibernate-issues mailing list