You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by js...@apache.org on 2002/06/27 16:09:15 UTC

cvs commit: jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl DynaTagScript.java StaticTag.java TagScript.java BeanTagScript.java StaticTagScript.java

jstrachan    2002/06/27 07:09:15

  Modified:    jelly/src/java/org/apache/commons/jelly/impl
                        DynaTagScript.java StaticTag.java TagScript.java
                        BeanTagScript.java StaticTagScript.java
  Log:
  patched the Script implementations to capture line and column number information better. Now exceptions thrown while setting tag attributes will have location information attached
  
  Revision  Changes    Path
  1.9       +27 -19    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/DynaTagScript.java
  
  Index: DynaTagScript.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/DynaTagScript.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- DynaTagScript.java	25 Jun 2002 17:10:07 -0000	1.8
  +++ DynaTagScript.java	27 Jun 2002 14:09:15 -0000	1.9
  @@ -66,6 +66,7 @@
   
   import org.apache.commons.jelly.CompilableTag;
   import org.apache.commons.jelly.JellyContext;
  +import org.apache.commons.jelly.JellyException;
   import org.apache.commons.jelly.Script;
   import org.apache.commons.jelly.Tag;
   import org.apache.commons.jelly.DynaTag;
  @@ -109,21 +110,28 @@
   
       /** Evaluates the body of a tag */
       public void run(JellyContext context, XMLOutput output) throws Exception {
  -
  -        tag.setContext(context);
  +        try {
  +            tag.setContext(context);
  +            
  +            DynaTag dynaTag = (DynaTag) tag;
  +    
  +            // ### probably compiling this to 2 arrays might be quicker and smaller
  +            for (Iterator iter = attributes.entrySet().iterator(); iter.hasNext();) {
  +                Map.Entry entry = (Map.Entry) iter.next();
  +                String name = (String) entry.getKey();
  +                Expression expression = (Expression) entry.getValue();
  +    
  +                Object value = expression.evaluate(context);
  +                dynaTag.setAttribute(name, value);
  +            }
           
  -        DynaTag dynaTag = (DynaTag) tag;
  -
  -        // ### probably compiling this to 2 arrays might be quicker and smaller
  -        for (Iterator iter = attributes.entrySet().iterator(); iter.hasNext();) {
  -            Map.Entry entry = (Map.Entry) iter.next();
  -            String name = (String) entry.getKey();
  -            Expression expression = (Expression) entry.getValue();
  -
  -            Object value = expression.evaluate(context);
  -            dynaTag.setAttribute(name, value);
  +            tag.doTag(output);
  +        } 
  +        catch (JellyException e) {
  +            handleException(e);
  +        }
  +        catch (Exception e) {
  +            handleException(e);
           }
  -        
  -        runTag(output);
       }
   }
  
  
  
  1.9       +6 -6      jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/StaticTag.java
  
  Index: StaticTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/StaticTag.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- StaticTag.java	26 Jun 2002 09:24:36 -0000	1.8
  +++ StaticTag.java	27 Jun 2002 14:09:15 -0000	1.9
  @@ -107,7 +107,7 @@
       //-------------------------------------------------------------------------                    
       public void doTag(XMLOutput output) throws Exception {
           output.startElement(uri, localName, qname, attributes);
  -        invokeBody(  output);
  +        invokeBody(output);
           output.endElement(uri, localName, qname);
       }
       
  
  
  
  1.13      +30 -27    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/TagScript.java
  
  Index: TagScript.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/TagScript.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- TagScript.java	25 Jun 2002 17:11:41 -0000	1.12
  +++ TagScript.java	27 Jun 2002 14:09:15 -0000	1.13
  @@ -197,28 +197,8 @@
       // Implementation methods
       //-------------------------------------------------------------------------      
       
  -    /**
  -     * Evaluates the tag, catching any exceptions and rethrowing them in
  -     * a wrapped exception which includes the line and column numbers
  -     */
  -    protected void runTag(XMLOutput output) throws Exception {
  -		try {
  -			tag.doTag(output);
  -		} 
  -        catch (JellyException e) {
  -			if (e.getLineNumber() == -1) {
  -				e.setColumnNumber(columnNumber);
  -				e.setLineNumber(lineNumber);
  -			}
  -			throw e;
  -		}
  -        catch (Exception e) {
  -            log.error( "Caught exception: " + e, e );
  -            throw new JellyException(e, columnNumber, lineNumber);            
  -        }
  -    }
  -    
  -    /** Converts the given value to the required type. 
  +    /** 
  +     * Converts the given value to the required type. 
        *
        * @param value is the value to be converted. This will not be null
        * @param requiredType the type that the value should be converted to
  @@ -232,5 +212,28 @@
               return ConvertUtils.convert((String) value, requiredType);
           }
           return value;
  +    }
  +    
  +    /**
  +     * A helper method to handle this non-Jelly exception.
  +     * This method will rethrow the exception, wrapped in a JellyException
  +     * while adding line number information etc.
  +     */
  +    protected void handleException(Exception e) throws Exception {
  +        log.error( "Caught exception: " + e, e );
  +        throw new JellyException(e, columnNumber, lineNumber);            
  +    }
  +    
  +    /**
  +     * A helper method to handle this Jelly exception.
  +     * This method adorns the JellyException with location information
  +     * such as adding line number information etc.
  +     */
  +    protected void handleException(JellyException e) throws Exception {
  +        if (e.getLineNumber() == -1) {
  +            e.setColumnNumber(columnNumber);
  +            e.setLineNumber(lineNumber);
  +        }
  +        throw e;
       }
   }
  
  
  
  1.11      +19 -8     jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/BeanTagScript.java
  
  Index: BeanTagScript.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/BeanTagScript.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- BeanTagScript.java	21 Jun 2002 02:57:17 -0000	1.10
  +++ BeanTagScript.java	27 Jun 2002 14:09:15 -0000	1.11
  @@ -180,7 +180,10 @@
           for ( Iterator iter = attributes.keySet().iterator(); iter.hasNext(); ) {
               String name = (String) iter.next();
               if ( ! attributeSet.contains( name ) ) {
  -                throw new JellyException( "This tag does not understand the attribute '" + name + "'" );
  +                throw new JellyException( 
  +                    "This tag does not understand the attribute '" + name + "'", 
  +                    getColumnNumber(), getLineNumber()  
  +                );
               }
           }
           return this;
  @@ -223,11 +226,19 @@
                   throw new JellyException( 
                       "Cannot call method: " + method.getName() + " on tag of type: " 
                       + tag.getClass().getName() + " with value: " + value + " of type: " 
  -                    + valueTypeName + ". Exception: " + e, e 
  +                    + valueTypeName + ". Exception: " + e, getColumnNumber(), getLineNumber()
                   );
               }
           }
           
  -        runTag(output);
  +        try {
  +            tag.doTag(output);
  +        } 
  +        catch (JellyException e) {
  +            handleException(e);
  +        }
  +        catch (Exception e) {
  +            handleException(e);
  +        }
       }
   }
  
  
  
  1.2       +22 -14    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/StaticTagScript.java
  
  Index: StaticTagScript.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/StaticTagScript.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StaticTagScript.java	25 Jun 2002 19:12:29 -0000	1.1
  +++ StaticTagScript.java	27 Jun 2002 14:09:15 -0000	1.2
  @@ -66,6 +66,7 @@
   
   import org.apache.commons.jelly.CompilableTag;
   import org.apache.commons.jelly.JellyContext;
  +import org.apache.commons.jelly.JellyException;
   import org.apache.commons.jelly.Script;
   import org.apache.commons.jelly.Tag;
   import org.apache.commons.jelly.DynaTag;
  @@ -105,28 +106,35 @@
       //-------------------------------------------------------------------------                
       /** Evaluates the body of a tag */
       public void run(JellyContext context, XMLOutput output) throws Exception {
  -
           if ( firstRun ) {
               firstRun = false;
               
               // lets see if we have a dynamic tag
               tag = findDynamicTag(context, (StaticTag) tag);
           }
  -        tag.setContext(context);
  +        try {        
  +            tag.setContext(context);
  +            
  +            DynaTag dynaTag = (DynaTag) tag;
  +    
  +            // ### probably compiling this to 2 arrays might be quicker and smaller
  +            for (Iterator iter = attributes.entrySet().iterator(); iter.hasNext();) {
  +                Map.Entry entry = (Map.Entry) iter.next();
  +                String name = (String) entry.getKey();
  +                Expression expression = (Expression) entry.getValue();
  +    
  +                Object value = expression.evaluate(context);
  +                dynaTag.setAttribute(name, value);
  +            }
           
  -        DynaTag dynaTag = (DynaTag) tag;
  -
  -        // ### probably compiling this to 2 arrays might be quicker and smaller
  -        for (Iterator iter = attributes.entrySet().iterator(); iter.hasNext();) {
  -            Map.Entry entry = (Map.Entry) iter.next();
  -            String name = (String) entry.getKey();
  -            Expression expression = (Expression) entry.getValue();
  -
  -            Object value = expression.evaluate(context);
  -            dynaTag.setAttribute(name, value);
  +            tag.doTag(output);
  +        } 
  +        catch (JellyException e) {
  +            handleException(e);
  +        }
  +        catch (Exception e) {
  +            handleException(e);
           }
  -        
  -        runTag(output);
       }
   
       /**
  
  
  

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