You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rd...@apache.org on 2002/03/06 21:21:25 UTC

cvs commit: jakarta-commons/beanutils/src/test/org/apache/commons/beanutils AbstractChild.java AbstractParent.java AlphaBean.java BetaBean.java Child.java MethodUtilsTestCase.java

rdonkin     02/03/06 12:21:25

  Modified:    beanutils/src/java/org/apache/commons/beanutils
                        MethodUtils.java
               beanutils/src/test/org/apache/commons/beanutils
                        MethodUtilsTestCase.java
  Added:       beanutils/src/test/org/apache/commons/beanutils
                        AbstractChild.java AbstractParent.java
                        AlphaBean.java BetaBean.java Child.java
  Log:
  Added (the promised) invokeMethod methods which are like the invokeExactMethod methods but they invoke the first method with the given name that has compatible (rather than exacty matching) parameters. Also added test cases. Will be used in digester.
  
  Revision  Changes    Path
  1.6       +166 -0    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.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- MethodUtils.java	23 Jan 2002 22:35:58 -0000	1.5
  +++ MethodUtils.java	6 Mar 2002 20:21:24 -0000	1.6
  @@ -82,6 +82,128 @@
       // --------------------------------------------------------- Public Methods
   
   
  +
  +    /**
  +     * <p>Invoke a named method whose parameter type matches the object type.</p>
  +     *
  +     * <p>The behaviour of this method is less deterministic 
  +     * than {@link #invokeExactMethod}. 
  +     * It loops through all methods with names that match
  +     * and then executes the first it finds with compatable parameters.</p>
  +     *
  +     * <p> This is a convenient wrapper for
  +     * {@link #invokeMethod(Object object,String methodName,Object [] args)}.
  +     * </p>
  +     *
  +     * @param object invoke method on this object
  +     * @param methodName get method with this name
  +     * @param arg use this argument
  +     *
  +     * @throw NoSuchMethodException if there is no such accessible method
  +     * @throw InvocationTargetException wraps an exception thrown by the
  +     *  method invoked
  +     * @throw IllegalAccessException if the requested method is not accessible
  +     *  via reflection
  +     */
  +    public static Object invokeMethod(
  +            Object object,
  +            String methodName,
  +            Object arg)
  +            throws
  +            NoSuchMethodException,
  +            IllegalAccessException,
  +            InvocationTargetException {
  +
  +        Object[] args = {arg};
  +        return invokeMethod(object, methodName, args);
  +
  +    }
  +
  +
  +    /**
  +     * <p>Invoke a named method whose parameter type matches the object type.</p>
  +     *
  +     * <p>The behaviour of this method is less deterministic 
  +     * than {@link #invokeExactMethod(Object object,String methodName,Object [] args)}. 
  +     * It loops through all methods with names that match
  +     * and then executes the first it finds with compatable parameters.</p>
  +     *
  +     * <p> This is a convenient wrapper for
  +     * {@link #invokeMethod(Object object,String methodName,Object [] args,Class[] parameterTypes)}.
  +     * </p>
  +     *
  +     * @param object invoke method on this object
  +     * @param methodName get method with this name
  +     * @param args use these arguments
  +     *
  +     * @throw NoSuchMethodException if there is no such accessible method
  +     * @throw InvocationTargetException wraps an exception thrown by the
  +     *  method invoked
  +     * @throw IllegalAccessException if the requested method is not accessible
  +     *  via reflection
  +     */
  +    public static Object invokeMethod(
  +            Object object,
  +            String methodName,
  +            Object[] args)
  +            throws
  +            NoSuchMethodException,
  +            IllegalAccessException,
  +            InvocationTargetException {
  +
  +        int arguments = args.length;
  +        Class parameterTypes [] = new Class[arguments];
  +        for (int i = 0; i < arguments; i++) {
  +            parameterTypes[i] = args[i].getClass();
  +        }
  +        return invokeMethod(object, methodName, args, parameterTypes);
  +
  +    }
  +
  +
  +    /**
  +     * <p>Invoke a named method whose parameter type matches the object type.</p>
  +     *
  +     * <p>The behaviour of this method is less deterministic 
  +     * than {@link 
  +     * #invokeExactMethod(Object object,String methodName,Object [] args,Class[] parameterTypes)}. 
  +     * It loops through all methods with names that match
  +     * and then executes the first it finds with compatable parameters.</p>
  +     *
  +     *
  +     * @param object invoke method on this object
  +     * @param methodName get method with this name
  +     * @param args use these arguments
  +     * @param parameterTypes match these parameters
  +     *
  +     * @throw NoSuchMethodException if there is no such accessible method
  +     * @throw InvocationTargetException wraps an exception thrown by the
  +     *  method invoked
  +     * @throw IllegalAccessException if the requested method is not accessible
  +     *  via reflection
  +     */
  +    public static Object invokeMethod(
  +            Object object,
  +            String methodName,
  +            Object[] args,
  +            Class[] parameterTypes)
  +                throws
  +                    NoSuchMethodException,
  +                    IllegalAccessException,
  +                    InvocationTargetException {
  +        
  +
  +        Method method = getMatchingAccessibleMethod(
  +                object.getClass(),
  +                methodName,
  +                parameterTypes);
  +        if (method == null)
  +            throw new NoSuchMethodException("No such accessible method: " +
  +                    methodName + "() on object: " + object.getClass().getName());
  +        return method.invoke(object, args);
  +    }
  +
  +
       /**
        * <p>Invoke a method whose parameter type matches exactly the object
        * type.</p>
  @@ -339,5 +461,49 @@
   
       }
   
  +    /**
  +     * <p>Find an accessible method that matches the given name and has compatible parameters.
  +     * Compatible parameters mean that every method parameter is assignable from 
  +     * the given parameters.
  +     * In other words, it finds a method with the given name 
  +     * that will take the parameters given.<p>
  +     *
  +     * <p>This method is slightly undeterminstic since it loops 
  +     * through methods names and return the first matching method.</p>
  +     * 
  +     * <p>This method is used by 
  +     * {@link 
  +     * #invokeMethod(Object object,String methodName,Object [] args,Class[] parameterTypes)}.
  +     *
  +     * @param clazz find method in this class
  +     * @param methodName find method with this name
  +     * @param parameterTypes find method with compatible parameters 
  +     */
  +    private static Method getMatchingAccessibleMethod(
  +                                                Class clazz,
  +                                                String methodName,
  +                                                Class[] parameterTypes) {
  +        int paramSize = parameterTypes.length;
  +        Method[] methods = clazz.getMethods();
  +        for (int i = 0, size = methods.length; i < size ; i++) {
  +            if (methods[i].getName().equals(methodName)) {
  +                Class[] methodsParams = methods[i].getParameterTypes();
  +                int methodParamSize = methodsParams.length;
  +                if (methodParamSize == paramSize) {                    
  +                    for (int n = 0 ; n < methodParamSize; n++) {
  +                        if (!parameterTypes[n].isAssignableFrom(methodsParams[n])) {
  +                            break;
  +                        }
  +                    }
  +                    Method method = getAccessibleMethod(methods[i]);
  +                    if (method != null) {
  +                        return method;
  +                    }
  +                }
  +            }
  +        }
  +        
  +        return null;                                        
  +    }
   
   }
  
  
  
  1.5       +59 -0     jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/MethodUtilsTestCase.java
  
  Index: MethodUtilsTestCase.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/MethodUtilsTestCase.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MethodUtilsTestCase.java	23 Jan 2002 22:52:26 -0000	1.4
  +++ MethodUtilsTestCase.java	6 Mar 2002 20:21:24 -0000	1.5
  @@ -227,4 +227,63 @@
   
           }
       }
  +    
  +    /**
  +     * <p> Test <code>invokeMethod</code>.
  +     */
  +    public void testInvokeMethod() throws Exception {
  +        // i'm going to test that the actual calls work first and then try them via reflection
  +        
  +        AbstractParent parent = new AlphaBean("parent");
  +        
  +        // try testAddChild through abstract superclass
  +        BetaBean childOne = new BetaBean("ChildOne");
  +        
  +        assertEquals("Oh no! Badly coded test case! (1)", "ChildOne", parent.testAddChild(childOne));
  +        
  +        // let's try MethodUtils version
  +        assertEquals(
  +                        "Cannot invoke through abstract class (1)", 
  +                        "ChildOne", 
  +                        MethodUtils.invokeMethod(parent, "testAddChild", childOne));
  +
  +        
  +        // try adding through interface
  +        AlphaBean childTwo = new AlphaBean("ChildTwo");
  +        
  +        assertEquals("Oh no! Badly coded test case! (2)", "ChildTwo", parent.testAddChild(childTwo));
  +        
  +        // let's try MethodUtils version
  +        assertEquals(
  +                        "Cannot invoke through interface (1)", 
  +                        "ChildTwo", 
  +                        MethodUtils.invokeMethod(parent, "testAddChild", childTwo));
  +       
  +        
  +        Object[] params = new Object[2];
  +
  +        assertEquals("Oh no! Badly coded test case! (3)", "ChildOne", parent.testAddChild2("parameter", childOne));
  +        
  +        
  +        // let's try MethodUtils version
  +        params[0] = "parameter";
  +        params[1] = childOne;
  +        
  +        assertEquals(
  +                        "Cannot invoke through abstract class (1)", 
  +                        "ChildOne", 
  +                        MethodUtils.invokeMethod(parent, "testAddChild2", params));
  +                        
  +        assertEquals("Oh no! Badly coded test case! (4)", "ChildTwo", parent.testAddChild2("parameter", childTwo));
  +        
  +        // let's try MethodUtils version
  +        params[0] = "parameter";
  +        params[1] = childTwo;
  +       
  +        assertEquals(
  +                        "Cannot invoke through abstract class (1)", 
  +                        "ChildTwo", 
  +                        MethodUtils.invokeMethod(parent, "testAddChild2", params));
  +        
  +    }
   }
  
  
  
  1.1                  jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/AbstractChild.java
  
  Index: AbstractChild.java
  ===================================================================
  /*
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-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;
  
  public class AbstractChild implements Child {
      
      private String name;
      
      protected void setName(String name)
      {
          this.name = name;
      }
      
      public String getName()
      {
          return name;
      }
      
  }
  
  
  
  1.1                  jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/AbstractParent.java
  
  Index: AbstractParent.java
  ===================================================================
  /*
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-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;
  
  public abstract class AbstractParent {
      
      private Child child;
      
      public Child getChild()
      {
          return child;
      }
  
      public String testAddChild(Child child) {
          this.child = child;
          return child.getName();
      }
      
  
      public String testAddChild2(String ignore, Child child) {
          this.child = child;
          return child.getName();
      }
  }
  
  
  
  1.1                  jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/AlphaBean.java
  
  Index: AlphaBean.java
  ===================================================================
  /*
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-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;
  
  public class AlphaBean extends AbstractParent implements Child {
      
      private String name;
      
      public AlphaBean(String name) {
          this.name = name;
      }
      
      public String getName() {
          return name;
      }
  }
  
  
  
  1.1                  jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/BetaBean.java
  
  Index: BetaBean.java
  ===================================================================
  /*
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-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;
  
  public class BetaBean extends AbstractChild {
      
      public BetaBean(String name) {
          setName(name);
      }
  }
  
  
  
  1.1                  jakarta-commons/beanutils/src/test/org/apache/commons/beanutils/Child.java
  
  Index: Child.java
  ===================================================================
  /*
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-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;
  
  public interface Child {
      
      public String getName();
  }
  
  
  

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