[hibernate-commits] Hibernate SVN: r16506 - in validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation: util and 1 other directory.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Mon May 4 11:34:08 EDT 2009
Author: epbernard
Date: 2009-05-04 11:34:08 -0400 (Mon, 04 May 2009)
New Revision: 16506
Modified:
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java
Log:
HV-149 ReflectionHelper.containsMethod ignores "is" methods
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java 2009-05-04 12:42:25 UTC (rev 16505)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/engine/ValidatorImpl.java 2009-05-04 15:34:08 UTC (rev 16506)
@@ -544,12 +544,17 @@
private <T> Object collectMetaConstraintsForPath(Class<T> clazz, Object value, PropertyIterator propertyIter, Set<MetaConstraint<T, ?>> metaConstraints) {
propertyIter.split();
+ final BeanMetaData<T> metaData = getBeanMetaData( clazz );
if ( !propertyIter.hasNext() ) {
- if ( !ReflectionHelper.containsMember( clazz, propertyIter.getHead() ) ) {
+ //use metadata first as ReflectionHelper#containsMember is slow
+ //TODO store some metadata here?
+ if ( metaData.getPropertyDescriptor( propertyIter.getHead() ) == null
+ && !ReflectionHelper.containsMember( clazz, propertyIter.getHead() ) ) {
+ //TODO better error report
throw new IllegalArgumentException( "Invalid property path." );
}
- List<MetaConstraint<T, ? extends Annotation>> metaConstraintList = getBeanMetaData( clazz ).geMetaConstraintList();
+ List<MetaConstraint<T, ? extends Annotation>> metaConstraintList = metaData.geMetaConstraintList();
for ( MetaConstraint<T, ?> metaConstraint : metaConstraintList ) {
if ( metaConstraint.getPropertyName().equals( propertyIter.getHead() ) ) {
metaConstraints.add( metaConstraint );
@@ -557,7 +562,7 @@
}
}
else {
- List<Member> cascadedMembers = getBeanMetaData( clazz ).getCascadedMembers();
+ List<Member> cascadedMembers = metaData.getCascadedMembers();
for ( Member m : cascadedMembers ) {
if ( ReflectionHelper.getPropertyName( m ).equals( propertyIter.getHead() ) ) {
Type type = ReflectionHelper.typeOf( m );
Modified: validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java
===================================================================
--- validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java 2009-05-04 12:42:25 UTC (rev 16505)
+++ validator/trunk/hibernate-validator/src/main/java/org/hibernate/validation/util/ReflectionHelper.java 2009-05-04 15:34:08 UTC (rev 16506)
@@ -394,7 +394,15 @@
*/
public static boolean containsMethod(Class<?> clazz, String methodName) {
try {
- clazz.getMethod( "get" + methodName.substring( 0, 1 ).toUpperCase() + methodName.substring( 1 ) );
+ char string[] = methodName.toCharArray();
+ string[0] = Character.toUpperCase( string[0] );
+ methodName = new String( string );
+ try {
+ clazz.getMethod( "get" + methodName );
+ }
+ catch ( NoSuchMethodException e ) {
+ clazz.getMethod( "is" + methodName );
+ }
return true;
}
catch ( NoSuchMethodException e ) {
More information about the hibernate-commits
mailing list