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/02/13 17:00:40 UTC

cvs commit: jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/beanshell TestBeanShellEL.java

jstrachan    02/02/13 08:00:39

  Modified:    jelly    build.properties.sample build.xml
               jelly/src/java/org/apache/commons/jelly Context.java
                        Jelly.java
               jelly/src/java/org/apache/commons/jelly/expression/beanshell
                        BeanShellExpression.java
                        BeanShellExpressionFactory.java
               jelly/src/java/org/apache/commons/jelly/impl TagScript.java
               jelly/src/java/org/apache/commons/jelly/parser
                        XMLParser.java
               jelly/src/java/org/apache/commons/jelly/tags/core
                        ExprTag.java ForEachTag.java
               jelly/src/test/org/apache/commons/jelly TestAll.java
  Added:       jelly/src/java/org/apache/commons/jelly/expression/beanshell
                        JellyInterpreter.java package.html
               jelly/src/test/org/apache/commons/jelly TestCoreTags.java
                        testing123.jelly
               jelly/src/test/org/apache/commons/jelly/beanshell
                        TestBeanShellEL.java
  Log:
  Added support for BeanShell expressions in the core tags along with some unit tests. Unfortunately things are a bit of a kludge to support BeanShell - some changes are required to make it more optimal like (i) supporting a compile() of beanshell expressions and (ii) having to explicitly push in all variables in the context via Interpreter.set() rather than it being able to pull them from somewhere. Hopefully a neater EL could be Velocity.
  
  Revision  Changes    Path
  1.2       +10 -2     jakarta-commons-sandbox/jelly/build.properties.sample
  
  Index: build.properties.sample
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/build.properties.sample,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- build.properties.sample	11 Feb 2002 00:27:40 -0000	1.1
  +++ build.properties.sample	13 Feb 2002 16:00:39 -0000	1.2
  @@ -7,8 +7,16 @@
   # jakarta-commons-logging.jar
   logging.jar=../../jakarta-commons/logging/dist/commons-logging.jar
   
  +# you can change this property to point at a local copy of the java 2 platform api
  +jdk-doc-url=http://java.sun.com/products/jdk/1.3/docs/api
  +
  +# for the XML tags the following is required
  +#
   # dom4j.jar - go to http://dom4j.org to download
   dom4j.jar=/java/dom4j/dom4j.jar
   
  -# you can change this property to point at a local copy of the java 2 platform api
  -jdk-doc-url=http://java.sun.com/products/jdk/1.3/docs/api
  +# for the beanshell expression language the following is required
  +#
  +# beanshell.jar - go to http://www.beanshell.org
  +beanshell.jar=/java/beanshell/beanshell.jar
  +
  
  
  
  1.3       +24 -2     jakarta-commons-sandbox/jelly/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/build.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- build.xml	12 Feb 2002 21:34:33 -0000	1.2
  +++ build.xml	13 Feb 2002 16:00:39 -0000	1.3
  @@ -3,7 +3,7 @@
   
   <!--
           "Digester" component of the Jakarta Commons Subproject
  -        $Id: build.xml,v 1.2 2002/02/12 21:34:33 jstrachan Exp $
  +        $Id: build.xml,v 1.3 2002/02/13 16:00:39 jstrachan Exp $
   -->
   
   
  @@ -97,6 +97,7 @@
       <pathelement location="${jaxp.jaxp.jar}"/>
       <pathelement location="${jaxp.parser.jar}"/>
       <pathelement location="${dom4j.jar}"/>
  +    <pathelement location="${beanshell.jar}"/>
       <pathelement location="${commons-beanutils.jar}"/>
       <pathelement location="${commons-collections.jar}"/>
       <pathelement location="${commons-logging.jar}"/>
  @@ -116,6 +117,7 @@
       <pathelement location="${jaxp.jaxp.jar}"/>
       <pathelement location="${jaxp.parser.jar}"/>
       <pathelement location="${dom4j.jar}"/>
  +    <pathelement location="${beanshell.jar}"/>
       <pathelement location="${commons-beanutils.jar}"/>
       <pathelement location="${commons-collections.jar}"/>
       <pathelement location="${commons-logging.jar}"/>
  @@ -254,7 +256,7 @@
   
   
      <target name="test.xml" depends="compile.tests" 
  -      description="Runs sample XML tags">
  +      description="Runs the test of the XML tags">
       <java classname="org.apache.commons.jelly.TestXMLTags" fork="yes">
         <classpath refid="test.classpath"/>
         <sysproperty key="org.apache.commons.logging.log" value="org.apache.commons.logging.SimpleLog"/>
  @@ -262,6 +264,15 @@
       </java>
      </target>
   
  +   <target name="test.beanshell" depends="compile.tests" 
  +      description="Runs the BeanShell EL tests">
  +    <java classname="org.apache.commons.jelly.beanshell.TestBeanShellEL" fork="yes">
  +      <classpath refid="test.classpath"/>
  +      <sysproperty key="org.apache.commons.logging.log" value="org.apache.commons.logging.SimpleLog"/>
  +      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog" value="debug"/>
  +    </java>
  +   </target>
  +
   <!-- ========== Sample Program Targets ==================================== -->
   
      <target name="demo.hw" depends="compile" 
  @@ -277,6 +288,17 @@
       <java classname="org.apache.commons.jelly.Jelly" fork="yes">
         <classpath refid="test.classpath"/>
         <arg value="src/test/org/apache/commons/jelly/example2.jelly"/> 
  +    </java>
  +   </target>
  +
  +   <target name="demo.2" depends="compile" 
  +      description="Runs demo #2">
  +    <java classname="org.apache.commons.jelly.Jelly" fork="yes">
  +      <classpath refid="test.classpath"/>
  +      <arg value="src/test/org/apache/commons/jelly/testing123.jelly"/> 
  +      <arg value="one"/> 
  +      <arg value="two"/> 
  +      <arg value="three"/> 
       </java>
      </target>
   
  
  
  
  1.3       +14 -5     jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Context.java
  
  Index: Context.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Context.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Context.java	12 Feb 2002 21:34:33 -0000	1.2
  +++ Context.java	13 Feb 2002 16:00:39 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Context.java,v 1.2 2002/02/12 21:34:33 jstrachan Exp $
  - * $Revision: 1.2 $
  - * $Date: 2002/02/12 21:34:33 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Context.java,v 1.3 2002/02/13 16:00:39 jstrachan Exp $
  + * $Revision: 1.3 $
  + * $Date: 2002/02/13 16:00:39 $
    *
    * ====================================================================
    *
  @@ -57,18 +57,19 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    * 
  - * $Id: Context.java,v 1.2 2002/02/12 21:34:33 jstrachan Exp $
  + * $Id: Context.java,v 1.3 2002/02/13 16:00:39 jstrachan Exp $
    */
   package org.apache.commons.jelly;
   
   import java.io.Writer;
   import java.util.Hashtable;
  +import java.util.Iterator;
   import java.util.Map;
   
   /** <p><code>Context</code> represents the Jelly context.</p>
     *
     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision: 1.2 $
  +  * @version $Revision: 1.3 $
     */
   public class Context {
   
  @@ -96,4 +97,12 @@
               variables.put( name, value );
           }
       }    
  +    
  +    /** 
  +     * @return an Iterator over the current variable names in this
  +     * context 
  +     */
  +    public Iterator getVariableNames() {
  +        return variables.keySet().iterator();
  +    }
   }
  
  
  
  1.2       +18 -4     jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Jelly.java
  
  Index: Jelly.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Jelly.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Jelly.java	12 Feb 2002 21:34:33 -0000	1.1
  +++ Jelly.java	13 Feb 2002 16:00:39 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Jelly.java,v 1.1 2002/02/12 21:34:33 jstrachan Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/12 21:34:33 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/Jelly.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/02/13 16:00:39 $
    *
    * ====================================================================
    *
  @@ -57,7 +57,7 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    * 
  - * $Id: Jelly.java,v 1.1 2002/02/12 21:34:33 jstrachan Exp $
  + * $Id: Jelly.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
    */
   package org.apache.commons.jelly;
   
  @@ -74,7 +74,7 @@
   /** <p><code>Jelly</code> an application which runs a Jelly script.</p>
     *
     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision: 1.1 $
  +  * @version $Revision: 1.2 $
     */
   public class Jelly {
   
  @@ -88,10 +88,20 @@
               return;
           }
           String input = args[0];
  +        
  +/*
  +        // later we might wanna add some command line arguments 
  +        // checking stuff using commons-cli to specify the output file
  +        // and input file via command line arguments
  +  
           Writer writer = ( args.length > 1 ) 
               ? new FileWriter( args[1] ) 
               : new OutputStreamWriter( System.out );
           BufferedWriter output = new BufferedWriter( writer );
  +*/      
  +        Writer output = new BufferedWriter( 
  +            new OutputStreamWriter( System.out )
  +        );
           
           XMLParser parser = new XMLParser();
           Script script = parser.parse( input );
  @@ -102,7 +112,11 @@
               log.debug( "Compiled script: " + script );
           }
           
  -        Context context = new Context( System.getProperties() );        
  +        // add the system properties and the command line arguments
  +        //Context context = new Context( System.getProperties() );
  +        Context context = new Context();
  +        context.setVariable( "args", args );
  +        
           script.run( context, output );
           output.close();
       }    
  
  
  
  1.2       +27 -5     jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/BeanShellExpression.java
  
  Index: BeanShellExpression.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/BeanShellExpression.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BeanShellExpression.java	12 Feb 2002 21:34:34 -0000	1.1
  +++ BeanShellExpression.java	13 Feb 2002 16:00:39 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/BeanShellExpression.java,v 1.1 2002/02/12 21:34:34 jstrachan Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/12 21:34:34 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/BeanShellExpression.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/02/13 16:00:39 $
    *
    * ====================================================================
    *
  @@ -57,30 +57,52 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    * 
  - * $Id: BeanShellExpression.java,v 1.1 2002/02/12 21:34:34 jstrachan Exp $
  + * $Id: BeanShellExpression.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
    */
   package org.apache.commons.jelly.expression.beanshell;
   
   import org.apache.commons.jelly.Context;
   import org.apache.commons.jelly.expression.ExpressionSupport;
   
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogSource;
  +
  +
   /** Represents a <a href="http://www.beanshell.org">beanshell</a> expression
     *
     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision: 1.1 $
  +  * @version $Revision: 1.2 $
     */
   public class BeanShellExpression extends ExpressionSupport {
   
  +    /** The Log to which logging calls will be made. */
  +    private static final Log log = LogSource.getInstance( BeanShellExpression.class );
  +
       /** The expression */
       private String text;
       
  -    public BeanShellExpression(String text) {
  +    /** The interpreter */
  +    private JellyInterpreter interpreter = new JellyInterpreter();
  +    
  +    public BeanShellExpression(String text, JellyInterpreter interpreter) {
           this.text = text;
  +        this.interpreter = interpreter;
       }
   
       // Expression interface
       //------------------------------------------------------------------------- 
       public Object evaluate(Context context) {
  -        return null;
  +        try {
  +            interpreter.setContext(context);
  +            if ( log.isDebugEnabled() ) {            
  +                log.debug( "Evaluating EL: " + text );
  +            }
  +            
  +            return interpreter.eval( text );
  +        }
  +        catch (Exception e) {
  +            log.warn( "Caught exception evaluating: " + text + ". Reason: " + e, e );
  +            return null;
  +        }
       }
   }
  
  
  
  1.2       +7 -4      jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/BeanShellExpressionFactory.java
  
  Index: BeanShellExpressionFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/BeanShellExpressionFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BeanShellExpressionFactory.java	12 Feb 2002 21:34:34 -0000	1.1
  +++ BeanShellExpressionFactory.java	13 Feb 2002 16:00:39 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/BeanShellExpressionFactory.java,v 1.1 2002/02/12 21:34:34 jstrachan Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/12 21:34:34 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/BeanShellExpressionFactory.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/02/13 16:00:39 $
    *
    * ====================================================================
    *
  @@ -57,7 +57,7 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    * 
  - * $Id: BeanShellExpressionFactory.java,v 1.1 2002/02/12 21:34:34 jstrachan Exp $
  + * $Id: BeanShellExpressionFactory.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
    */
   package org.apache.commons.jelly.expression.beanshell;
   
  @@ -67,17 +67,20 @@
   /** Represents a factory of <a href="http://www.beanshell.org">beanshell</a> expressions
     *
     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision: 1.1 $
  +  * @version $Revision: 1.2 $
     */
   public class BeanShellExpressionFactory implements ExpressionFactory {
   
  +    /** The interpreter */
  +    private JellyInterpreter interpreter = new JellyInterpreter();
  +    
       // ExpressionFactory interface
       //------------------------------------------------------------------------- 
       public Expression createExpression(String text) throws Exception {
           int length = text.length();
           if ( length > 2 && text.charAt(0) == '{'  && text.charAt( length - 1 ) == '}' ) {
               text = text.substring( 1, length - 1 );
  -            return new BeanShellExpression(text);
  +            return new BeanShellExpression(text, interpreter);
           }
           return null;
       }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/JellyInterpreter.java
  
  Index: JellyInterpreter.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/JellyInterpreter.java,v 1.1 2002/02/13 16:00:39 jstrachan Exp $
   * $Revision: 1.1 $
   * $Date: 2002/02/13 16:00:39 $
   *
   * ====================================================================
   *
   * 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/>.
   * 
   * $Id: JellyInterpreter.java,v 1.1 2002/02/13 16:00:39 jstrachan Exp $
   */
  package org.apache.commons.jelly.expression.beanshell;
  
  import bsh.EvalError;
  import bsh.Interpreter;
  
  import java.util.Iterator;
  
  import org.apache.commons.jelly.Context;
  
  /** Integrates BeanShell's interpreter with Jelly's Context
    *
    * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
    * @version $Revision: 1.1 $
    */
  public class JellyInterpreter extends Interpreter {
  
      private Context context;
      
      public JellyInterpreter() {
      }
  
      public Context getContext() {
          return context;
      }
      
      public void setContext(Context context) throws EvalError {
          this.context = context;
          
          // now pass in all the variables
          for ( Iterator iter = context.getVariableNames(); iter.hasNext(); ) {
              String name = (String) iter.next();
              Object value = context.getVariable(name);
              set( name, value );
          }
      }
  
  /*
    
      // the following code doesn't work - it seems that
      // all variables must be passed into the Interpreter
      // via set() method
   
      public Object get(String name) throws EvalError {
          if ( context != null ) {
              Object answer = context.getVariable( name );
              if ( answer != null ) { 
                  return answer;
              }
          }
          return super.get( name );
      }
  */
  }
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/expression/beanshell/package.html
  
  Index: package.html
  ===================================================================
  <html>
  <head>
  </head>
  <body>
  
    <p>Implementation of Expression and ExpressionFactory that uses <a href="http://www.beanshell.org">BeanShell</a>.
    </p>
  
  </body>
  </html>
  
  
  1.3       +16 -7     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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TagScript.java	12 Feb 2002 21:34:34 -0000	1.2
  +++ TagScript.java	13 Feb 2002 16:00:39 -0000	1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/TagScript.java,v 1.2 2002/02/12 21:34:34 jstrachan Exp $
  - * $Revision: 1.2 $
  - * $Date: 2002/02/12 21:34:34 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/impl/TagScript.java,v 1.3 2002/02/13 16:00:39 jstrachan Exp $
  + * $Revision: 1.3 $
  + * $Date: 2002/02/13 16:00:39 $
    *
    * ====================================================================
    *
  @@ -57,7 +57,7 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    *
  - * $Id: TagScript.java,v 1.2 2002/02/12 21:34:34 jstrachan Exp $
  + * $Id: TagScript.java,v 1.3 2002/02/13 16:00:39 jstrachan Exp $
    */
   package org.apache.commons.jelly.impl;
   
  @@ -85,7 +85,7 @@
   /** <p><code>TagScript</code> evaluates a custom tag.</p>
     *
     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision: 1.2 $
  +  * @version $Revision: 1.3 $
     */
   public class TagScript implements Script {
       
  @@ -185,12 +185,21 @@
           for ( int i = 0, size = expressions.length; i < size; i++ ) {
               Expression expression = expressions[i];
               Method method =  methods[i];
  +            Class type = types[i];
               
  -            Object value = expression.evaluate( context );
  +            // some types are Expression objects so let the tag
  +            // evaluate them
  +            Object value = null;
  +            if ( type.isAssignableFrom( Expression.class ) ) {
  +                value = expression;
  +            }
  +            else {
  +                value = expression.evaluate( context );
  +            }
               
               // convert value to correct type
               if ( value != null ) {
  -                value = convertType( value, types[i] );
  +                value = convertType( value, type );
               }
               
               Object[] arguments = { value };
  
  
  
  1.4       +25 -16    jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/parser/XMLParser.java
  
  Index: XMLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/parser/XMLParser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XMLParser.java	12 Feb 2002 21:34:34 -0000	1.3
  +++ XMLParser.java	13 Feb 2002 16:00:39 -0000	1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/parser/XMLParser.java,v 1.3 2002/02/12 21:34:34 jstrachan Exp $
  - * $Revision: 1.3 $
  - * $Date: 2002/02/12 21:34:34 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/parser/XMLParser.java,v 1.4 2002/02/13 16:00:39 jstrachan Exp $
  + * $Revision: 1.4 $
  + * $Date: 2002/02/13 16:00:39 $
    *
    * ====================================================================
    *
  @@ -57,7 +57,7 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    *
  - * $Id: XMLParser.java,v 1.3 2002/02/12 21:34:34 jstrachan Exp $
  + * $Id: XMLParser.java,v 1.4 2002/02/13 16:00:39 jstrachan Exp $
    */
   package org.apache.commons.jelly.parser;
   
  @@ -115,7 +115,7 @@
    * The SAXParser and XMLReader portions of this code come from Digester.</p>
    *
    * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  - * @version $Revision: 1.3 $
  + * @version $Revision: 1.4 $
    */
   public class XMLParser extends DefaultHandler {
       
  @@ -588,27 +588,27 @@
        * @exception SAXException if a parsing error is to be reported
        */
       public void startElement(
  -    String namespaceURI, String localName, String qName, Attributes list
  +        String namespaceURI, String localName, String qName, Attributes list
       ) throws SAXException {
           
           // if this is a tag then create a script to run it
           // otherwise pass the text to the current body
           tagScript = createTag( namespaceURI, localName, list );
           tagScriptStack.add( tagScript );
  -        
  +
           if ( tagScript != null ) {            
               // set parent relationship...
               Tag tag = tagScript.getTag();
               tag.setParent( parentTag );
               parentTag = tag;
  -            
  +
               if ( textBuffer.length() > 0 ) {
                   script.addScript( new TextScript( textBuffer.toString() ) );
                   textBuffer.setLength(0);
               }
  -            
  +
               script.addScript( tagScript );
  -            
  +
               // start a new body
               scriptStack.push( script );
               script = new ScriptBlock();
  @@ -616,7 +616,7 @@
           }
           else {
               // XXXX: might wanna handle empty elements later...
  -            
  +
               textBuffer.append( "<" );
               textBuffer.append( qName );
               int size = list.getLength();
  @@ -717,8 +717,9 @@
        *
        * @exception SAXException if a parsing error is to be reported
        */
  -    public void ignorableWhitespace(char buffer[], int start, int len)
  -    throws SAXException {
  +    public void ignorableWhitespace(
  +        char buffer[], int start, int len
  +    ) throws SAXException {
           ;	// No processing required
           
       }
  @@ -911,7 +912,7 @@
               // use the URI to load a taglib
               TagLibrary taglib = (TagLibrary) taglibs.get( namespaceURI );
               if ( taglib == null ) {
  -                if ( namespaceURI.startsWith( "jelly:" ) ) {
  +                if ( namespaceURI != null && namespaceURI.startsWith( "jelly:" ) ) {
                       String uri = namespaceURI.substring(6);
                       // try to find the class on the claspath
                       try {
  @@ -946,6 +947,10 @@
               log.warn( "Could not create taglib or URI: " + namespaceURI + " tag name: " + localName, e );
               throw createSAXException(e);
           }
  +        catch (Throwable e) {
  +            log.warn( "Could not create taglib or URI: " + namespaceURI + " tag name: " + localName, e );
  +            return null;
  +        }
       }
       
       protected Expression createExpression( String tagName, String attributeName, String attributeValue ) throws Exception {
  @@ -968,19 +973,23 @@
        * @return the new exception
        */
       protected SAXException createSAXException(String message, Exception e) {
  +        log.warn( "Underlying exception: " + e );
  +        e.printStackTrace();
           if (locator != null) {
               String error = "Error at (" + locator.getLineNumber() + ", "
               + locator.getColumnNumber() + ": " + message;
               if (e != null) {
                   return new SAXParseException(error, locator, e);
  -            } else {
  +            } 
  +            else {
                   return new SAXParseException(error, locator);
               }
           }
           log.error("No Locator!");
           if (e != null) {
               return new SAXException(message, e);
  -        } else {
  +        } 
  +        else {
               return new SAXException(message);
           }
       }
  
  
  
  1.2       +10 -4     jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/ExprTag.java
  
  Index: ExprTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/ExprTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ExprTag.java	12 Feb 2002 21:34:34 -0000	1.1
  +++ ExprTag.java	13 Feb 2002 16:00:39 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/ExprTag.java,v 1.1 2002/02/12 21:34:34 jstrachan Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/12 21:34:34 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/ExprTag.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/02/13 16:00:39 $
    *
    * ====================================================================
    *
  @@ -57,7 +57,7 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    * 
  - * $Id: ExprTag.java,v 1.1 2002/02/12 21:34:34 jstrachan Exp $
  + * $Id: ExprTag.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
    */
   package org.apache.commons.jelly.tags.core;
   
  @@ -69,13 +69,19 @@
   import org.apache.commons.jelly.TagSupport;
   import org.apache.commons.jelly.expression.Expression;
   
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogSource;
  +
   /** A tag which evaluates an expression
     *
     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision: 1.1 $
  +  * @version $Revision: 1.2 $
     */
   public class ExprTag extends TagSupport {
   
  +    /** The Log to which logging calls will be made. */
  +    private static final Log log = LogSource.getInstance( ExprTag.class );
  +
       /** The expression to evaluate. */
       private Expression value;        
   
  @@ -86,7 +92,7 @@
       //------------------------------------------------------------------------- 
       public void run(Context context, Writer writer) throws IOException {
           if ( value != null ) {
  -            String text = value.evaluateAsString( context );
  +            String text = value.evaluateAsString( context );            
               if ( text != null ) {
                   writer.write( text );
               }
  
  
  
  1.2       +18 -3     jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/ForEachTag.java
  
  Index: ForEachTag.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/ForEachTag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ForEachTag.java	12 Feb 2002 21:34:34 -0000	1.1
  +++ ForEachTag.java	13 Feb 2002 16:00:39 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/ForEachTag.java,v 1.1 2002/02/12 21:34:34 jstrachan Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/12 21:34:34 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/java/org/apache/commons/jelly/tags/core/ForEachTag.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/02/13 16:00:39 $
    *
    * ====================================================================
    *
  @@ -57,7 +57,7 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    * 
  - * $Id: ForEachTag.java,v 1.1 2002/02/12 21:34:34 jstrachan Exp $
  + * $Id: ForEachTag.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
    */
   package org.apache.commons.jelly.tags.core;
   
  @@ -71,14 +71,20 @@
   import org.apache.commons.jelly.TagSupport;
   import org.apache.commons.jelly.expression.Expression;
   
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogSource;
  +
   
   /** A tag which performs an iteration over the results of an XPath expression
     *
     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision: 1.1 $
  +  * @version $Revision: 1.2 $
     */
   public class ForEachTag extends TagSupport {
   
  +    /** The Log to which logging calls will be made. */
  +    private static final Log log = LogSource.getInstance( ForEachTag.class );
  +    
       /** Holds the variable name to export for the item being iterated over. */
       private Expression items;
       /** 
  @@ -106,8 +112,17 @@
       // Tag interface
       //------------------------------------------------------------------------- 
       public void run(Context context, Writer writer) throws Exception {
  +        if ( log.isDebugEnabled() ) {
  +            log.debug( "running with items: " + items );
  +        }
  +        
           if ( items != null ) { 
               Iterator iter = items.evaluateAsIterator( context );
  +            
  +            if ( log.isDebugEnabled() ) {
  +                log.debug( "Iterating through: " + iter );
  +            }
  +            
               for ( index = begin; iter.hasNext() && index < end; index += step ) {
                   Object value = iter.next();
                   if (var != null) {
  
  
  
  1.2       +9 -5      jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/TestAll.java
  
  Index: TestAll.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/TestAll.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestAll.java	11 Feb 2002 00:27:41 -0000	1.1
  +++ TestAll.java	13 Feb 2002 16:00:39 -0000	1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/TestAll.java,v 1.1 2002/02/11 00:27:41 jstrachan Exp $
  - * $Revision: 1.1 $
  - * $Date: 2002/02/11 00:27:41 $
  + * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/TestAll.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
  + * $Revision: 1.2 $
  + * $Date: 2002/02/13 16:00:39 $
    *
    * ====================================================================
    *
  @@ -57,7 +57,7 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    * 
  - * $Id: TestAll.java,v 1.1 2002/02/11 00:27:41 jstrachan Exp $
  + * $Id: TestAll.java,v 1.2 2002/02/13 16:00:39 jstrachan Exp $
    */
   package org.apache.commons.jelly;
   
  @@ -66,10 +66,12 @@
   import junit.framework.TestSuite;
   import junit.textui.TestRunner;
   
  +import org.apache.commons.jelly.beanshell.TestBeanShellEL;
  +
   /** Entry point for all JUnit tests.
     *
     * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
  -  * @version $Revision: 1.1 $
  +  * @version $Revision: 1.2 $
    */
   public class TestAll extends TestCase {
       
  @@ -80,6 +82,8 @@
       public static Test suite() {
           TestSuite suite = new TestSuite();
           suite.addTest(TestXMLTags.suite());
  +        suite.addTest(TestCoreTags.suite());
  +        suite.addTest(TestBeanShellEL.suite());
           return suite;
       }
       
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/TestCoreTags.java
  
  Index: TestCoreTags.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/TestCoreTags.java,v 1.1 2002/02/13 16:00:39 jstrachan Exp $
   * $Revision: 1.1 $
   * $Date: 2002/02/13 16:00:39 $
   *
   * ====================================================================
   *
   * 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/>.
   * 
   * $Id: TestCoreTags.java,v 1.1 2002/02/13 16:00:39 jstrachan Exp $
   */
  package org.apache.commons.jelly;
  
  import java.io.InputStream;
  import java.io.IOException;
  import java.io.StringWriter;
  
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  import junit.textui.TestRunner;
  
  import org.apache.commons.jelly.Context;
  import org.apache.commons.jelly.Script;
  import org.apache.commons.jelly.impl.TagScript;
  import org.apache.commons.jelly.parser.XMLParser;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogSource;
  
  
  /** Tests the core tags
    *
    * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
    * @version $Revision: 1.1 $
    */
  public class TestCoreTags extends TestCase {
      
      /** The Log to which logging calls will be made. */
      private static final Log log = LogSource.getInstance( TestXMLTags.class );
  
      public static void main( String[] args ) {
          TestRunner.run( suite() );
      }
      
      public static Test suite() {
          return new TestSuite(TestCoreTags.class);
      }
      
      public TestCoreTags(String testName) {
          super(testName);
      }
      
      public void testArgs() throws Exception {
          InputStream in = getClass().getResourceAsStream( "testing123.jelly" );
          XMLParser parser = new XMLParser();
          Script script = parser.parse( in );
          script = script.compile();
  
          log.debug( "Found: " + script );
          
          assertTrue( "Script is a TagScript", script instanceof TagScript );
          
          String[] args = { "one", "two", "three" };
          Context context = new Context();        
          context.setVariable( "args", args );
          StringWriter buffer = new StringWriter();
          
          script.run( context, buffer );
          
          String text = buffer.toString().trim();
          
          if ( log.isDebugEnabled() ) {
              log.debug( "Evaluated script as..." );
              log.debug( text );
          }
          
          assertEquals( "Produces the correct output", "one two three", text );        
      }    
  }
  
  
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/testing123.jelly
  
  Index: testing123.jelly
  ===================================================================
  <?xml version="1.0"?>
  <j:jelly xmlns:j="jelly:core">
    <j:forEach var="arg" items="{args}">
      <j:expr value="{arg}"/> 
    </j:forEach>
  </j:jelly>
  
  
  1.1                  jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/beanshell/TestBeanShellEL.java
  
  Index: TestBeanShellEL.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-commons-sandbox/jelly/src/test/org/apache/commons/jelly/beanshell/TestBeanShellEL.java,v 1.1 2002/02/13 16:00:39 jstrachan Exp $
   * $Revision: 1.1 $
   * $Date: 2002/02/13 16:00:39 $
   *
   * ====================================================================
   *
   * 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/>.
   * 
   * $Id: TestBeanShellEL.java,v 1.1 2002/02/13 16:00:39 jstrachan Exp $
   */
  package org.apache.commons.jelly.beanshell;
  
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  import junit.textui.TestRunner;
  
  import org.apache.commons.jelly.Context;
  import org.apache.commons.jelly.expression.Expression;
  import org.apache.commons.jelly.expression.ExpressionFactory;
  import org.apache.commons.jelly.expression.beanshell.BeanShellExpressionFactory;
  
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogSource;
  
  
  /** Tests the BeanShell EL
    *
    * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
    * @version $Revision: 1.1 $
    */
  public class TestBeanShellEL extends TestCase {
      
      /** The Log to which logging calls will be made. */
      private static final Log log = LogSource.getInstance( TestBeanShellEL.class );
  
      /** Jelly context */
      protected Context context;
      
      /** The factory of Expression objects */
      protected ExpressionFactory factory;
      
      
      public static void main( String[] args ) {
          TestRunner.run( suite() );
      }
      
      public static Test suite() {
          return new TestSuite(TestBeanShellEL.class);
      }
      
      public TestBeanShellEL(String testName) {
          super(testName);
      }
      
      public void setUp() {
          context = new Context();
          context.setVariable( "foo", "abc" );
          context.setVariable( "bar", new Integer( 123 ) );
          factory = new BeanShellExpressionFactory();
      }
      
      public void testEL() throws Exception {
          assertExpression( "{foo}", "abc" );
          assertExpression( "{bar * 2}", new Integer( 246 ) );
      }    
      
      /** Evaluates the given expression text and tests it against the expected value */
      protected void assertExpression( String expressionText, Object expectedValue ) throws Exception {
          Expression expr = factory.createExpression( expressionText );
          Object value = expr.evaluate( context );
          assertEquals( "Value of expression: " + expressionText, expectedValue, value );
      }        
  }
  
  
  
  

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