jvanzyl     01/08/25 08:20:59

  Modified:    digester/src/java/org/apache/commons/digester
                        CallMethodRule.java
  Log:
  - added a simple condition to end() where the method specified with
    addCallMethod() is not invoked when there is only a single parameter
    and it is null. This handles the case where the parameter is an attribute
    that is not actually defined in block currently being parsed.
  
    Craig I am not entirely sure if this handles the case where the parameter
    is taken from bodyText, but the testbed passes and if you could look at
    what I did or suggest another course of action I would be happy to continue
    exploring the digester classes.
  
    This fixes the problem I have where a default value in a bean is set and
    should only be overriden when the specified attribute actually has a
    value.
  
  Revision  Changes    Path
  1.8       +13 -5     
jakarta-commons/digester/src/java/org/apache/commons/digester/CallMethodRule.java
  
  Index: CallMethodRule.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/CallMethodRule.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- CallMethodRule.java       2001/08/20 19:18:42     1.7
  +++ CallMethodRule.java       2001/08/25 15:20:59     1.8
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/CallMethodRule.java,v
 1.7 2001/08/20 19:18:42 craigmcc Exp $
  - * $Revision: 1.7 $
  - * $Date: 2001/08/20 19:18:42 $
  + * $Header: 
/home/cvs/jakarta-commons/digester/src/java/org/apache/commons/digester/CallMethodRule.java,v
 1.8 2001/08/25 15:20:59 jvanzyl Exp $
  + * $Revision: 1.8 $
  + * $Date: 2001/08/25 15:20:59 $
    *
    * ====================================================================
    *
  @@ -77,7 +77,7 @@
    *
    * @author Craig McClanahan
    * @author Scott Sanders
  - * @version $Revision: 1.7 $ $Date: 2001/08/20 19:18:42 $
  + * @version $Revision: 1.8 $ $Date: 2001/08/25 15:20:59 $
    */
   
   public class CallMethodRule extends Rule {
  @@ -243,8 +243,16 @@
   
        // Retrieve or construct the parameter values array
        String parameters[] = null;
  -     if (paramCount > 0)
  +     if (paramCount > 0) {
            parameters = (String[]) digester.popParams();
  +         
  +         // In the case where the parameter for the method
  +         // is taken from an attribute, and that attribute
  +         // isn't actually defined in the source XML file.
  +         if (paramCount == 1 && parameters[0] == null) {
  +             return;
  +         }             
  +     }         
        else {
            parameters = new String[1];
            parameters[0] = bodyText;
  
  
  

Reply via email to