Author: simonetripodi Date: Fri Jun 8 19:33:32 2012 New Revision: 1348202 URL: http://svn.apache.org/viewvc?rev=1348202&view=rev Log: throws NoSuchMethodException only when analyzing methods and not properties s/get(Indexed)(Read|Write)PropertyDescriptor()/get(Indexed)(Read|Write)Method()
Modified: commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/BeanProperties.java commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanAccessor.java commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanProperties.java commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/GetPropertyTestCase.java commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsReadableTestCase.java commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsWritableTestCase.java commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/SetPropertyTestCase.java Modified: commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/BeanProperties.java URL: http://svn.apache.org/viewvc/commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/BeanProperties.java?rev=1348202&r1=1348201&r2=1348202&view=diff ============================================================================== --- commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/BeanProperties.java (original) +++ commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/BeanProperties.java Fri Jun 8 19:33:32 2012 @@ -22,6 +22,7 @@ package org.apache.commons.beanutils2; import java.beans.IndexedPropertyDescriptor; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; import java.util.Map; public interface BeanProperties<B> @@ -36,7 +37,7 @@ public interface BeanProperties<B> * @throws NoSuchMethodException TODO */ boolean isReadable( String propertyName ) - throws IntrospectionException, NoSuchMethodException; + throws IntrospectionException; /** * Checks if the specified property name identifies a writable property. @@ -47,7 +48,7 @@ public interface BeanProperties<B> * @throws NoSuchMethodException TODO */ boolean isWritable( String propertyName ) - throws IntrospectionException, NoSuchMethodException; + throws IntrospectionException; /** * @@ -57,7 +58,7 @@ public interface BeanProperties<B> * @throws NoSuchMethodException */ public abstract PropertyDescriptor getPropertyDescriptor( String propertyName ) - throws IntrospectionException, NoSuchMethodException; + throws IntrospectionException; /** * @@ -66,17 +67,17 @@ public interface BeanProperties<B> * @throws IntrospectionException * @throws NoSuchMethodException */ - public abstract PropertyDescriptor getReadPropertyDescriptor( String propertyName ) + public abstract Method getReadPropertyMethod( String propertyName ) throws IntrospectionException, NoSuchMethodException; /** * - * @param propertyName + * @param name * @return * @throws NoSuchMethodException * @throws IntrospectionException */ - public abstract IndexedPropertyDescriptor getIndexedPropertyDescriptor( String propertyName ) + public abstract Method getWriteMethod( String name ) throws NoSuchMethodException, IntrospectionException; /** @@ -86,17 +87,17 @@ public interface BeanProperties<B> * @throws NoSuchMethodException * @throws IntrospectionException */ - public abstract IndexedPropertyDescriptor getIndexedReadPropertyDescriptor( String propertyName ) + public abstract IndexedPropertyDescriptor getIndexedPropertyDescriptor( String propertyName ) throws NoSuchMethodException, IntrospectionException; /** * - * @param name + * @param propertyName * @return * @throws NoSuchMethodException * @throws IntrospectionException */ - public abstract PropertyDescriptor getWritePropertyDescriptor( String name ) + public abstract Method getIndexedReadMethod( String propertyName ) throws NoSuchMethodException, IntrospectionException; /** Modified: commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanAccessor.java URL: http://svn.apache.org/viewvc/commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanAccessor.java?rev=1348202&r1=1348201&r2=1348202&view=diff ============================================================================== --- commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanAccessor.java (original) +++ commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanAccessor.java Fri Jun 8 19:33:32 2012 @@ -22,7 +22,6 @@ package org.apache.commons.beanutils2; import static org.apache.commons.beanutils2.BeanUtils.on; import static org.apache.commons.beanutils2.internal.Assertions.checkNotNull; -import java.beans.IndexedPropertyDescriptor; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.InvocationTargetException; @@ -55,8 +54,7 @@ final class DefaultBeanAccessor<B> throws IllegalAccessException, IntrospectionException, InvocationTargetException, NoSuchMethodException { checkNotNull( propertyName, "Parameter 'propertyName' must not be null!" ); - PropertyDescriptor propertyDescriptor = properties.getReadPropertyDescriptor( propertyName ); - Object newBean = propertyDescriptor.getReadMethod().invoke( bean ); + Object newBean = properties.getReadPropertyMethod( propertyName ).invoke( bean ); return new DefaultBeanAccessor<Object>( newBean ); } @@ -67,9 +65,8 @@ final class DefaultBeanAccessor<B> throws IntrospectionException, NoSuchMethodException { checkNotNull( propertyName, "Parameter 'propertyName' must not be null!" ); - IndexedPropertyDescriptor indexedPropertyDescriptor = properties.getIndexedReadPropertyDescriptor( propertyName ); return new DefaultIndexedPropertyGetterAccessor( bean, propertyName, - indexedPropertyDescriptor.getIndexedReadMethod() ); + properties.getIndexedReadMethod( propertyName ) ); } /** @@ -109,8 +106,7 @@ final class DefaultBeanAccessor<B> throws IllegalAccessException, IntrospectionException, InvocationTargetException, NoSuchMethodException { checkNotNull( propertyName, "Parameter 'propertyName' must not be null!" ); - PropertyDescriptor propertyDescriptor = properties.getWritePropertyDescriptor( propertyName ); - return new DefaultBeanPropertySetter<B>( bean, propertyDescriptor.getWriteMethod() ); + return new DefaultBeanPropertySetter<B>( bean, properties.getWriteMethod( propertyName ) ); } /** @@ -205,15 +201,15 @@ final class DefaultBeanAccessor<B> { try { - properties.getWritePropertyDescriptor( propertyName ); + if ( properties.isWritable( propertyName ) ) + { + set( propertyName ).with( propertyValue ); + } } - catch ( NoSuchMethodException e ) + catch ( IntrospectionException e ) { // either the property there is no property with the given name or it is not writable so we skip it. - return; } - - set( propertyName ).with( propertyValue ); } /** Modified: commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanProperties.java URL: http://svn.apache.org/viewvc/commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanProperties.java?rev=1348202&r1=1348201&r2=1348202&view=diff ============================================================================== --- commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanProperties.java (original) +++ commons/sandbox/beanutils2/trunk/src/main/java/org/apache/commons/beanutils2/DefaultBeanProperties.java Fri Jun 8 19:33:32 2012 @@ -24,6 +24,7 @@ import static org.apache.commons.beanuti import java.beans.IndexedPropertyDescriptor; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; import java.util.Map; final class DefaultBeanProperties<B> @@ -45,7 +46,7 @@ final class DefaultBeanProperties<B> * {@inheritDoc} */ public boolean isReadable( String propertyName ) - throws IntrospectionException, NoSuchMethodException + throws IntrospectionException { checkNotNull( propertyName, "Parameter 'propertyName' must not be null!" ); PropertyDescriptor propertyDescriptor = getPropertyDescriptor( propertyName ); @@ -64,7 +65,7 @@ final class DefaultBeanProperties<B> * {@inheritDoc} */ public boolean isWritable( String propertyName ) - throws IntrospectionException, NoSuchMethodException + throws IntrospectionException { checkNotNull( propertyName, "Parameter 'propertyName' must not be null!" ); PropertyDescriptor propertyDescriptor = getPropertyDescriptor( propertyName ); @@ -83,12 +84,15 @@ final class DefaultBeanProperties<B> * {@inheritDoc} */ public PropertyDescriptor getPropertyDescriptor( String propertyName ) - throws IntrospectionException, NoSuchMethodException + throws IntrospectionException { PropertyDescriptor propertyDescriptor = registry.getPropertyDescriptor( beanClass, propertyName ); - checkMethod( propertyDescriptor, "Property '%s' does not exist in bean of type %s", - propertyName, beanClass.getName() ); + if ( propertyDescriptor == null ) + { + throw new IntrospectionException( format( "Property '%s' does not exist in bean of type %s", + propertyName, beanClass.getName() ) ); + } return propertyDescriptor; } @@ -96,67 +100,63 @@ final class DefaultBeanProperties<B> /** * {@inheritDoc} */ - public PropertyDescriptor getReadPropertyDescriptor( String propertyName ) + public Method getReadPropertyMethod( String propertyName ) throws IntrospectionException, NoSuchMethodException { PropertyDescriptor propertyDescriptor = getPropertyDescriptor( propertyName ); - checkMethod( propertyDescriptor.getReadMethod(), - "Bean of type %s does not provide a getter for property '%s'!", - beanClass.getName(), propertyName ); - - return propertyDescriptor; + return checkMethod( propertyDescriptor.getReadMethod(), + "Bean of type %s does not provide a getter for property '%s'!", + beanClass.getName(), propertyName ); } /** * {@inheritDoc} */ - public IndexedPropertyDescriptor getIndexedPropertyDescriptor( String propertyName ) + public Method getWriteMethod( String name ) throws NoSuchMethodException, IntrospectionException { - PropertyDescriptor propertyDescriptor = getPropertyDescriptor( propertyName ); - checkArgument( propertyDescriptor instanceof IndexedPropertyDescriptor, - "Property '%s' in bean of type %s is not an indexed property", propertyName, beanClass.getName() ); - return (IndexedPropertyDescriptor) propertyDescriptor; + PropertyDescriptor propertyDescriptor = getPropertyDescriptor( name ); + + return checkMethod( propertyDescriptor.getWriteMethod(), + "Bean of type %s does not provide a setter for property '%s'!", + beanClass.getName(), name ); } /** * {@inheritDoc} */ - public IndexedPropertyDescriptor getIndexedReadPropertyDescriptor( String propertyName ) + public IndexedPropertyDescriptor getIndexedPropertyDescriptor( String propertyName ) throws NoSuchMethodException, IntrospectionException { - IndexedPropertyDescriptor indexedPropertyDescriptor = getIndexedPropertyDescriptor( propertyName ); - - checkMethod( indexedPropertyDescriptor.getIndexedReadMethod(), - "Bean of type %s does not provide a getter for indexed property '%s'!", - beanClass.getName(), propertyName ); - - return indexedPropertyDescriptor; + PropertyDescriptor propertyDescriptor = getPropertyDescriptor( propertyName ); + checkArgument( propertyDescriptor instanceof IndexedPropertyDescriptor, + "Property '%s' in bean of type %s is not an indexed property", propertyName, beanClass.getName() ); + return (IndexedPropertyDescriptor) propertyDescriptor; } /** * {@inheritDoc} */ - public PropertyDescriptor getWritePropertyDescriptor( String name ) + public Method getIndexedReadMethod( String propertyName ) throws NoSuchMethodException, IntrospectionException { - PropertyDescriptor propertyDescriptor = getPropertyDescriptor( name ); - - checkMethod( propertyDescriptor.getWriteMethod(), - "Bean of type %s does not provide a setter for property '%s'!", - beanClass.getName(), name ); + IndexedPropertyDescriptor indexedPropertyDescriptor = getIndexedPropertyDescriptor( propertyName ); - return propertyDescriptor; + return checkMethod( indexedPropertyDescriptor.getIndexedReadMethod(), + "Bean of type %s does not provide a getter for indexed property '%s'!", + beanClass.getName(), propertyName ); } - private static <T> void checkMethod( T method, String errorMessageTemplate, Object...arsg ) + private static Method checkMethod( Method method, String errorMessageTemplate, Object...arsg ) throws NoSuchMethodException { if ( method == null ) { throw new NoSuchMethodException( format( errorMessageTemplate, arsg ) ); } + + return method; } /** Modified: commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/GetPropertyTestCase.java URL: http://svn.apache.org/viewvc/commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/GetPropertyTestCase.java?rev=1348202&r1=1348201&r2=1348202&view=diff ============================================================================== --- commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/GetPropertyTestCase.java (original) +++ commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/GetPropertyTestCase.java Fri Jun 8 19:33:32 2012 @@ -23,6 +23,8 @@ import static org.apache.commons.beanuti import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.beans.IntrospectionException; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -64,7 +66,7 @@ public final class GetPropertyTestCase on( bean ).get( "writeOnlyProperty" ).get(); } - @Test( expected = NoSuchMethodException.class ) + @Test( expected = IntrospectionException.class ) public void getUnknownProperty() throws Exception { Modified: commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsReadableTestCase.java URL: http://svn.apache.org/viewvc/commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsReadableTestCase.java?rev=1348202&r1=1348201&r2=1348202&view=diff ============================================================================== --- commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsReadableTestCase.java (original) +++ commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsReadableTestCase.java Fri Jun 8 19:33:32 2012 @@ -21,6 +21,8 @@ import static org.apache.commons.beanuti import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.beans.IntrospectionException; + import org.junit.Test; public class IsReadableTestCase @@ -33,7 +35,7 @@ public class IsReadableTestCase on( TestBean.class ).getProperties().isReadable( null ); } - @Test( expected = NoSuchMethodException.class ) + @Test( expected = IntrospectionException.class ) public void isReadbleUnknown() throws Exception { Modified: commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsWritableTestCase.java URL: http://svn.apache.org/viewvc/commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsWritableTestCase.java?rev=1348202&r1=1348201&r2=1348202&view=diff ============================================================================== --- commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsWritableTestCase.java (original) +++ commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/IsWritableTestCase.java Fri Jun 8 19:33:32 2012 @@ -21,6 +21,8 @@ import static org.apache.commons.beanuti import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.beans.IntrospectionException; + import org.junit.Test; public class IsWritableTestCase @@ -33,7 +35,7 @@ public class IsWritableTestCase on( TestBean.class ).getProperties().isWritable( null ); } - @Test( expected = NoSuchMethodException.class ) + @Test( expected = IntrospectionException.class ) public void isWritbleUnknown() throws Exception { Modified: commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/SetPropertyTestCase.java URL: http://svn.apache.org/viewvc/commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/SetPropertyTestCase.java?rev=1348202&r1=1348201&r2=1348202&view=diff ============================================================================== --- commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/SetPropertyTestCase.java (original) +++ commons/sandbox/beanutils2/trunk/src/test/java/org/apache/commons/beanutils2/SetPropertyTestCase.java Fri Jun 8 19:33:32 2012 @@ -24,6 +24,8 @@ import static org.junit.Assert.assertEqu import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import java.beans.IntrospectionException; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -77,7 +79,7 @@ public class SetPropertyTestCase /** * Tests if trying to set a nonexistent property causes an NPE. */ - @Test( expected = NoSuchMethodException.class ) + @Test( expected = IntrospectionException.class ) public void setNonExistentProperty() throws Exception {