You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by robert burrell donkin <ro...@blueyonder.co.uk> on 2002/11/27 20:17:01 UTC

[beanutils] Re: cvs commit: jakarta-commons/beanutils/src/test/org/apache/commons/beanutils ConstructorUtilsTestCase.java TestBean.java

hi Rodney

sorry to be a PITA but...

we're trying to move the basic reflection code (as opposed to 
introspection) into lang. there is already a ContructionUtils in there as 
well as a MethodUtils (which will hopefully in the end replace the one in 
beanutils).

would it be possible to move this code into lang and work together on an 
improved version there?

- robert

On Tuesday, November 26, 2002, at 11:25 PM, rwaldhoff@apache.org wrote:

> rwaldhoff    2002/11/26 15:25:57
>
>   Modified:    beanutils project.xml
>                beanutils/src/java/org/apache/commons/beanutils
>                         MethodUtils.java
>                beanutils/src/test/org/apache/commons/beanutils
>                         TestBean.java
>   Added:       beanutils/src/java/org/apache/commons/beanutils
>                         ConstructorUtils.java
>                beanutils/src/test/org/apache/commons/beanutils
>                         ConstructorUtilsTestCase.java
>   Log:
>   add ConstructorUtils, parallel to MethodUtils
>
>   Revision  Changes    Path
>   1.7       +6 -0      jakarta-commons/beanutils/project.xml
>
>   Index: project.xml
>   ===================================================================
>   RCS file: /home/cvs/jakarta-commons/beanutils/project.xml,v
>   retrieving revision 1.6
>   retrieving revision 1.7
>   diff -u -r1.6 -r1.7
>   --- project.xml	30 Oct 2002 17:08:59 -0000	1.6
>   +++ project.xml	26 Nov 2002 23:25:57 -0000	1.7
>   @@ -40,6 +40,12 @@
>          <email>sanders@apache.org</email>
>          <organization>Apache Software Foundation</organization>
>        </developer>
>   +    <developer>
>   +      <name>Rodney Waldhoff</name>
>   +      <id>rwaldhoff</id>
>   +      <email>rwaldhoff@apache.org</email>
>   +      <organization>Apache Software Foundation</organization>
>   +    </developer>
>      </developers>
>
>      <dependencies>
>
>
>
>   1.17      +1 -1      jakarta-
> commons/beanutils/src/java/org/apache/commons/beanutils/MethodUtils.java
>
>   Index: MethodUtils.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-
> commons/beanutils/src/java/org/apache/commons/beanutils/MethodUtils.java,
> v
>   retrieving revision 1.16
>   retrieving revision 1.17
>   diff -u -r1.16 -r1.17
>   --- MethodUtils.java	19 Nov 2002 21:51:06 -0000	1.16
>   +++ MethodUtils.java	26 Nov 2002 23:25:57 -0000	1.17
>   @@ -680,7 +680,7 @@
>         *
>         * @return true if the assignement is compatible.
>         */
>   -    private static final boolean isAssignmentCompatible(Class 
> parameterType, Class parameterization) {
>   +    protected static final boolean isAssignmentCompatible(Class 
> parameterType, Class parameterization) {
>            // try plain assignment
>            if (parameterType.isAssignableFrom(parameterization)) {
>                return true;
>
>
>
>   1.1                  jakarta-
> commons/beanutils/src/java/org/apache/commons/beanutils/ConstructorUtils.
> java
>
>   Index: ConstructorUtils.java
>   ===================================================================
>   /*
>    * ====================================================================
>    *
>    * The Apache Software License, Version 1.1
>    *
>    * Copyright (c) 2002 The Apache Software Foundation.  All rights
>    * reserved.
>    *
>    * Redistribution and use in source and binary forms, with or without
>    * modification, are permitted provided that the following conditions
>    * are met:
>    *
>    * 1. Redistributions of source code must retain the above copyright
>    *    notice, this list of conditions and the following disclaimer.
>    *
>    * 2. Redistributions in binary form must reproduce the above copyright
>    *    notice, this list of conditions and the following disclaimer in
>    *    the documentation and/or other materials provided with the
>    *    distribution.
>    *
>    * 3. The end-user documentation included with the redistribution, if
>    *    any, must include the following acknowlegement:
>    *       "This product includes software developed by the
>    *        Apache Software Foundation (http://www.apache.org/)."
>    *    Alternately, this acknowlegement may appear in the software 
> itself,
>    *    if and wherever such third-party acknowlegements normally appear.
>    *
>    * 4. The names "The Jakarta Project", "Commons", and "Apache Software
>    *    Foundation" must not be used to endorse or promote products 
> derived
>    *    from this software without prior written permission. For written
>    *    permission, please contact apache@apache.org.
>    *
>    * 5. Products derived from this software may not be called "Apache"
>    *    nor may "Apache" appear in their names without prior written
>    *    permission of the Apache Group.
>    *
>    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>    * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>    * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>    * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>    * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>    * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>    * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>    * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>    * SUCH DAMAGE.
>    * ====================================================================
>    *
>    * This software consists of voluntary contributions made by many
>    * individuals on behalf of the Apache Software Foundation.  For more
>    * information on the Apache Software Foundation, please see
>    * <http://www.apache.org/>.
>    *
>    */
>
>   package org.apache.commons.beanutils;
>
>   import java.lang.reflect.Constructor;
>   import java.lang.reflect.InvocationTargetException;
>   import java.lang.reflect.Modifier;
>
>   /**
>    * @version $Revision: 1.1 $ $Date: 2002/11/26 23:25:57 $
>    * @author Craig R. McClanahan
>    * @author Ralph Schaer
>    * @author Chris Audley
>    * @author Rey FranÁois
>    * @author Gregor Ra˝man
>    * @author Jan Sorensen
>    * @author Robert Burrell Donkin
>    * @author Rodney Waldhoff
>    */
>   public class ConstructorUtils {
>
>       // --------------------------------------------------------- 
> Private Members
>       /** An empty class array */
>       private static final Class[] emptyClassArray = new Class[0];
>       /** An empty object array */
>       private static final Object[] emptyObjectArray = new Object[0];
>
>       // --------------------------------------------------------- Public 
> Methods
>
>       public static Object invokeConstructor(Class klass, Object arg)
>           throws
>               NoSuchMethodException,
>               IllegalAccessException,
>               InvocationTargetException,
>               InstantiationException {
>
>           Object[] args = { arg };
>           return invokeConstructor(klass, args);
>
>       }
>
>       public static Object invokeConstructor(Class klass, Object[] args)
>           throws
>               NoSuchMethodException,
>               IllegalAccessException,
>               InvocationTargetException,
>               InstantiationException {
>
>           if (null == args) {
>               args = emptyObjectArray;
>           }
>           int arguments = args.length;
>           Class parameterTypes[] = new Class[arguments];
>           for (int i = 0; i < arguments; i++) {
>               parameterTypes[i] = args[i].getClass();
>           }
>           return invokeConstructor(klass, args, parameterTypes);
>
>       }
>
>       public static Object invokeConstructor(
>           Class klass,
>           Object[] args,
>           Class[] parameterTypes)
>           throws
>               NoSuchMethodException,
>               IllegalAccessException,
>               InvocationTargetException,
>               InstantiationException {
>
>           if (parameterTypes == null) {
>               parameterTypes = emptyClassArray;
>           }
>           if (args == null) {
>               args = emptyObjectArray;
>           }
>
>           Constructor ctor =
>               getMatchingAccessibleConstructor(klass, parameterTypes);
>           if (null == ctor) {
>               throw new NoSuchMethodException(
>                   "No such accessible constructor on object: " + 
> klass.getName());
>           }
>           return ctor.newInstance(args);
>       }
>
>       public static Object invokeExactConstructor(Class klass, Object arg)
>           throws
>               NoSuchMethodException,
>               IllegalAccessException,
>               InvocationTargetException,
>               InstantiationException {
>
>           Object[] args = { arg };
>           return invokeExactConstructor(klass, args);
>
>       }
>       public static Object invokeExactConstructor(Class klass, Object[] 
> args)
>           throws
>               NoSuchMethodException,
>               IllegalAccessException,
>               InvocationTargetException,
>               InstantiationException {
>           if (null == args) {
>               args = emptyObjectArray;
>           }
>           int arguments = args.length;
>           Class parameterTypes[] = new Class[arguments];
>           for (int i = 0; i < arguments; i++) {
>               parameterTypes[i] = args[i].getClass();
>           }
>           return invokeExactConstructor(klass, args, parameterTypes);
>
>       }
>
>       public static Object invokeExactConstructor(
>           Class klass,
>           Object[] args,
>           Class[] parameterTypes)
>           throws
>               NoSuchMethodException,
>               IllegalAccessException,
>               InvocationTargetException,
>               InstantiationException {
>
>           if (args == null) {
>               args = emptyObjectArray;
>           }
>
>           if (parameterTypes == null) {
>               parameterTypes = emptyClassArray;
>           }
>
>           Constructor ctor = getAccessibleConstructor(klass, 
> parameterTypes);
>           if (null == ctor) {
>               throw new NoSuchMethodException(
>                   "No such accessible constructor on object: " + 
> klass.getName());
>           }
>           return ctor.newInstance(args);
>
>       }
>
>       public static Constructor getAccessibleConstructor(
>           Class klass,
>           Class parameterType) {
>
>           Class[] parameterTypes = { parameterType };
>           return getAccessibleConstructor(klass, parameterTypes);
>
>       }
>
>       public static Constructor getAccessibleConstructor(
>           Class klass,
>           Class[] parameterTypes) {
>
>           try {
>               return getAccessibleConstructor(
>                   klass.getConstructor(parameterTypes));
>           } catch (NoSuchMethodException e) {
>               return (null);
>           }
>
>       }
>
>       public static Constructor getAccessibleConstructor(Constructor ctor)
>  {
>
>           // Make sure we have a method to check
>           if (ctor == null) {
>               return (null);
>           }
>
>           // If the requested method is not public we cannot call it
>           if (!Modifier.isPublic(ctor.getModifiers())) {
>               return (null);
>           }
>
>           // If the declaring class is public, we are done
>           Class clazz = ctor.getDeclaringClass();
>           if (Modifier.isPublic(clazz.getModifiers())) {
>               return (ctor);
>           }
>
>           // what else can we do?
>           return null;
>
>       }
>
>       // -------------------------------------------------------- Private 
> Methods
>
>       private static Constructor getMatchingAccessibleConstructor(
>           Class clazz,
>           Class[] parameterTypes) {
>           // see if we can find the method directly
>           // most of the time this works and it's much faster
>           try {
>               Constructor ctor = clazz.getConstructor(parameterTypes);
>               try {
>                   //
>                   // XXX Default access superclass workaround
>                   //
>                   // When a public class has a default access superclass
>                   // with public methods, these methods are accessible.
>                   // Calling them from compiled code works fine.
>                   //
>                   // Unfortunately, using reflection to invoke these 
> methods
>                   // seems to (wrongly) to prevent access even when the 
> method
>                   // modifer is public.
>                   //
>                   // The following workaround solves the problem but will 
> only
>                   // work from sufficiently privilages code.
>                   //
>                   // Better workarounds would be greatfully accepted.
>                   //
>                   ctor.setAccessible(true);
>               } catch (SecurityException se) {}
>               return ctor;
>
>           } catch (NoSuchMethodException e) { /* SWALLOW */
>           }
>
>           // search through all methods
>           int paramSize = parameterTypes.length;
>           Constructor[] ctors = clazz.getConstructors();
>           for (int i = 0, size = ctors.length; i < size; i++) {
>               // compare parameters
>               Class[] ctorParams = ctors[i].getParameterTypes();
>               int ctorParamSize = ctorParams.length;
>               if (ctorParamSize == paramSize) {
>                   boolean match = true;
>                   for (int n = 0; n < ctorParamSize; n++) {
>                       if (!MethodUtils
>                           .isAssignmentCompatible(
>                               ctorParams[n],
>                               parameterTypes[n])) {
>                           match = false;
>                           break;
>                       }
>                   }
>
>                   if (match) {
>                       // get accessible version of method
>                       Constructor ctor = getAccessibleConstructor(ctors[i]
> );
>                       if (ctor != null) {
>                           try {
>                               ctor.setAccessible(true);
>                           } catch (SecurityException se) {}
>                           return ctor;
>                       }
>                   }
>               }
>           }
>
>           return null;
>       }
>
>   }
>
>
>
>   1.14      +54 -4     jakarta-
> commons/beanutils/src/test/org/apache/commons/beanutils/TestBean.java
>
>   Index: TestBean.java
>   ===================================================================
>   RCS file: /home/cvs/jakarta-
> commons/beanutils/src/test/org/apache/commons/beanutils/TestBean.java,v
>   retrieving revision 1.13
>   retrieving revision 1.14
>   diff -u -r1.13 -r1.14
>   --- TestBean.java	24 Sep 2002 18:45:54 -0000	1.13
>   +++ TestBean.java	26 Nov 2002 23:25:57 -0000	1.14
>   @@ -73,12 +73,62 @@
>     * General purpose test bean for JUnit tests for the "beanutils" 
> component.
>     *
>     * @author Craig R. McClanahan
>   + * @author Rodney Waldhoff
>     * @version $Revision$ $Date$
>     */
>
>    public class TestBean {
>
>   +    // ----------------------------------------------------------- 
> Constructors
>
>   +    public TestBean() {
>   +    }
>   +
>   +    public TestBean(String stringProperty) {
>   +        setStringProperty(stringProperty);
>   +    }
>   +
>   +    public TestBean(float floatProperty) {
>   +        setFloatProperty(floatProperty);
>   +    }
>   +
>   +    public TestBean(boolean booleanProperty) {
>   +        setBooleanProperty(booleanProperty);
>   +    }
>   +
>   +    public TestBean(Boolean booleanSecond) {
>   +        setBooleanSecond(booleanSecond.booleanValue());
>   +    }
>   +
>   +    public TestBean(float floatProperty, String stringProperty) {
>   +        setFloatProperty(floatProperty);
>   +        setStringProperty(stringProperty);
>   +    }
>   +
>   +    public TestBean(boolean booleanProperty, String stringProperty) {
>   +        setBooleanProperty(booleanProperty);
>   +        setStringProperty(stringProperty);
>   +    }
>   +
>   +    public TestBean(Boolean booleanSecond, String stringProperty) {
>   +        setBooleanSecond(booleanSecond.booleanValue());
>   +        setStringProperty(stringProperty);
>   +    }
>   +
>   +    public TestBean(Integer intProperty) {
>   +        setIntProperty(intProperty.intValue());
>   +    }
>   +
>   +    TestBean(int intProperty) {
>   +        setIntProperty(intProperty);
>   +    }
>   +
>   +    protected TestBean(boolean booleanProperty, boolean booleanSecond,
>  String stringProperty) {
>   +        setBooleanProperty(booleanProperty);
>   +        setBooleanSecond(booleanSecond);
>   +        setStringProperty(stringProperty);
>   +    }
>   +
>        // ------------------------------------------------------------- 
> Properties
>
>
>
>
>
>   1.1                  jakarta-
> commons/beanutils/src/test/org/apache/commons/beanutils/ConstructorUtilsTestCase.
> java
>
>   Index: ConstructorUtilsTestCase.java
>   ===================================================================
>   /*
>    * ====================================================================
>    *
>    * The Apache Software License, Version 1.1
>    *
>    * Copyright (c) 2002 The Apache Software Foundation.  All rights
>    * reserved.
>    *
>    * Redistribution and use in source and binary forms, with or without
>    * modification, are permitted provided that the following conditions
>    * are met:
>    *
>    * 1. Redistributions of source code must retain the above copyright
>    *    notice, this list of conditions and the following disclaimer.
>    *
>    * 2. Redistributions in binary form must reproduce the above copyright
>    *    notice, this list of conditions and the following disclaimer in
>    *    the documentation and/or other materials provided with the
>    *    distribution.
>    *
>    * 3. The end-user documentation included with the redistribution, if
>    *    any, must include the following acknowlegement:
>    *       "This product includes software developed by the
>    *        Apache Software Foundation (http://www.apache.org/)."
>    *    Alternately, this acknowlegement may appear in the software 
> itself,
>    *    if and wherever such third-party acknowlegements normally appear.
>    *
>    * 4. The names "The Jakarta Project", "Commons", and "Apache Software
>    *    Foundation" must not be used to endorse or promote products 
> derived
>    *    from this software without prior written permission. For written
>    *    permission, please contact apache@apache.org.
>    *
>    * 5. Products derived from this software may not be called "Apache"
>    *    nor may "Apache" appear in their names without prior written
>    *    permission of the Apache Group.
>    *
>    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>    * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>    * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>    * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>    * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>    * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>    * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>    * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>    * SUCH DAMAGE.
>    * ====================================================================
>    *
>    * This software consists of voluntary contributions made by many
>    * individuals on behalf of the Apache Software Foundation.  For more
>    * information on the Apache Software Foundation, please see
>    * <http://www.apache.org/>.
>    *
>    */
>
>
>   package org.apache.commons.beanutils;
>
>
>   import java.lang.reflect.Constructor;
>   import java.lang.reflect.Modifier;
>
>   import junit.framework.Test;
>   import junit.framework.TestCase;
>   import junit.framework.TestSuite;
>
>
>   /**
>    * <p> Test case for <code>ConstructorUtils</code> </p>
>    *
>    */
>   public class ConstructorUtilsTestCase extends TestCase {
>
>       // ---------------------------------------------------------- 
> Constructors
>
>       /**
>        * Construct a new instance of this test case.
>        *
>        * @param name Name of the test case
>        */
>       public ConstructorUtilsTestCase(String name) {
>           super(name);
>       }
>
>
>       // -------------------------------------------------- Overall Test 
> Methods
>
>
>       /**
>        * Set up instance variables required by this test case.
>        */
>       public void setUp() throws Exception {
>           super.setUp();
>       }
>
>
>       /**
>        * Return the tests included in this test suite.
>        */
>       public static Test suite() {
>           return (new TestSuite(ConstructorUtilsTestCase.class));
>       }
>
>       /**
>        * Tear down instance variables required by this test case.
>        */
>       public void tearDown() throws Exception {
>           super.tearDown();
>       }
>
>
>       // ------------------------------------------------ Individual Test 
> Methods
>
>       public void testInvokeConstructor() throws Exception {
>           {
>               Object obj = 
> ConstructorUtils.invokeConstructor(TestBean.class,"TEST");
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals("TEST",((TestBean)obj).getStringProperty());
>           }
>           {
>               Object obj = 
> ConstructorUtils.invokeConstructor(TestBean.class,new Float(17.3f));
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals(17.3f,((TestBean)obj).getFloatProperty(),0.0f)
> ;
>           }
>       }
>
>       public void testInvokeConstructorWithArgArray() throws Exception {
>           Object[] args = { new Float(17.3f), "TEST" };
>           Object obj = ConstructorUtils.invokeConstructor(TestBean.class,
> args);
>           assertNotNull(obj);
>           assertTrue(obj instanceof TestBean);
>           assertEquals(17.3f,((TestBean)obj).getFloatProperty(),0.0f);
>           assertEquals("TEST",((TestBean)obj).getStringProperty());
>       }
>
>       public void testInvokeConstructorWithTypeArray() throws Exception {
>           {
>               Object[] args = { Boolean.TRUE, "TEST" };
>               Class[] types = { Boolean.TYPE, String.class };
>               Object obj = 
> ConstructorUtils.invokeConstructor(TestBean.class,args,types);
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals(true,((TestBean)obj).getBooleanProperty());
>               assertEquals("TEST",((TestBean)obj).getStringProperty());
>           }
>           {
>               Object[] args = { Boolean.TRUE, "TEST" };
>               Class[] types = { Boolean.class, String.class };
>               Object obj = 
> ConstructorUtils.invokeConstructor(TestBean.class,args,types);
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals(true,((TestBean)obj).isBooleanSecond());
>               assertEquals("TEST",((TestBean)obj).getStringProperty());
>           }
>       }
>
>       public void testInvokeExactConstructor() throws Exception {
>           {
>               Object obj = 
> ConstructorUtils.invokeExactConstructor(TestBean.class,"TEST");
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals("TEST",((TestBean)obj).getStringProperty());
>           }
>           {
>               try {
>                   Object obj = 
> ConstructorUtils.invokeExactConstructor(TestBean.class,new Float(17.3f));
>                   fail("Expected NoSuchMethodException");
>               } catch(NoSuchMethodException e) {
>                   // expected
>               }
>           }
>           {
>               Object obj = 
> ConstructorUtils.invokeExactConstructor(TestBean.class,Boolean.TRUE);
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals(true,((TestBean)obj).isBooleanSecond());
>           }
>       }
>
>       public void testInvokeExactConstructorWithArgArray() throws 
> Exception {
>           {
>               Object[] args = { new Float(17.3f), "TEST" };
>               try {
>                   Object obj = 
> ConstructorUtils.invokeExactConstructor(TestBean.class,args);
>                   fail("Expected NoSuchMethodException");
>               } catch(NoSuchMethodException e) {
>                   // expected
>               }
>           }
>           {
>               Object[] args = { Boolean.TRUE, "TEST" };
>               Object obj = 
> ConstructorUtils.invokeExactConstructor(TestBean.class,args);
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals(true,((TestBean)obj).isBooleanSecond());
>               assertEquals("TEST",((TestBean)obj).getStringProperty());
>           }
>       }
>
>       public void testInvokeExactConstructorWithTypeArray() throws 
> Exception {
>           {
>               Object[] args = { Boolean.TRUE, "TEST" };
>               Class[] types = { Boolean.TYPE, String.class };
>               Object obj = 
> ConstructorUtils.invokeExactConstructor(TestBean.class,args,types);
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals(true,((TestBean)obj).getBooleanProperty());
>               assertEquals("TEST",((TestBean)obj).getStringProperty());
>           }
>           {
>               Object[] args = { Boolean.TRUE, "TEST" };
>               Class[] types = { Boolean.class, String.class };
>               Object obj = 
> ConstructorUtils.invokeExactConstructor(TestBean.class,args,types);
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals(true,((TestBean)obj).isBooleanSecond());
>               assertEquals("TEST",((TestBean)obj).getStringProperty());
>           }
>           {
>               Object[] args = { new Float(17.3f), "TEST" };
>               Class[] types = { Float.TYPE, String.class };
>               Object obj = 
> ConstructorUtils.invokeExactConstructor(TestBean.class,args,types);
>               assertNotNull(obj);
>               assertTrue(obj instanceof TestBean);
>               assertEquals(17.3f,((TestBean)obj).getFloatProperty(),0.0f)
> ;
>               assertEquals("TEST",((TestBean)obj).getStringProperty());
>           }
>           {
>               Object[] args = { new Float(17.3f), "TEST" };
>               Class[] types = { Float.class, String.class };
>               try {
>                   Object obj = 
> ConstructorUtils.invokeExactConstructor(TestBean.class,args,types);
>                   fail("Expected NoSuchMethodException");
>               } catch(NoSuchMethodException e) {
>                   // expected
>               }
>           }
>       }
>
>       public void testGetAccessibleConstructor() throws Exception {
>           {
>               Constructor ctor = 
> ConstructorUtils.getAccessibleConstructor(TestBean.class,String.class);
>               assertNotNull(ctor);
>               assertTrue(Modifier.isPublic(ctor.getModifiers()));
>           }
>           {
>               Constructor ctor = 
> ConstructorUtils.getAccessibleConstructor(TestBean.class,Integer.class);
>               assertNotNull(ctor);
>               assertTrue(Modifier.isPublic(ctor.getModifiers()));
>           }
>           {
>               Constructor ctor = 
> ConstructorUtils.getAccessibleConstructor(TestBean.class,Integer.TYPE);
>               assertNull(ctor);
>           }
>       }
>
>       public void testGetAccessibleConstructorWithTypeArray() throws 
> Exception {
>           {
>               Class[] types = { Boolean.TYPE, String.class };
>               Constructor ctor = 
> ConstructorUtils.getAccessibleConstructor(TestBean.class,types);
>               assertNotNull(ctor);
>               assertTrue(Modifier.isPublic(ctor.getModifiers()));
>           }
>           {
>               Class[] types = { Boolean.TYPE, Boolean.TYPE, String.class 
> };
>               Constructor ctor = 
> ConstructorUtils.getAccessibleConstructor(TestBean.class,types);
>               assertNull(ctor);
>           }
>       }
>
>       public void testGetAccessibleConstructorWithConstructorArg() throws 
> Exception {
>           {
>               Class[] types = { Integer.class };
>               Constructor c1 = TestBean.class.getConstructor(types);
>               Constructor ctor = 
> ConstructorUtils.getAccessibleConstructor(c1);
>               assertNotNull(ctor);
>               assertTrue(Modifier.isPublic(ctor.getModifiers()));
>           }
>           {
>               Class[] types = { Integer.class };
>               Constructor c1 = 
> TestBean.class.getDeclaredConstructor(types);
>               Constructor ctor = 
> ConstructorUtils.getAccessibleConstructor(c1);
>               assertNotNull(ctor);
>               assertTrue(Modifier.isPublic(ctor.getModifiers()));
>           }
>           {
>               Class[] types = { Integer.TYPE };
>               Constructor c1 = 
> TestBean.class.getDeclaredConstructor(types);
>               Constructor ctor = 
> ConstructorUtils.getAccessibleConstructor(c1);
>               assertNull(ctor);
>           }
>       }
>
>   }
>
>
>
>
> --
> To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.
> org>
> For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.
> org>
>


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>