kinman      2004/02/18 13:22:22

  Modified:    jasper2/src/share/org/apache/jasper
                        EmbeddedServletOptions.java JspC.java Options.java
               jasper2/src/share/org/apache/jasper/compiler Generator.java
               jasper2/src/share/org/apache/jasper/resources
                        messages.properties messages_es.properties
                        messages_fr.properties messages_ja.properties
  Log:
  - Add some intellignece to the compiler for generating code for useBean action.
    Generate direct instantiation (use new) when possible, use bean.instantiate
    when bean name is specified, and for the case of invalid bean class, either
    issue a translation time error (instead of javac error), or generate codes
    to throw InstantiationException at runtime, depending on a new compiler
    switch, errorOnUseBeanInvalidClassAttribute(defaulted to true).  ;_)
  
  Revision  Changes    Path
  1.9       +26 -3     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/EmbeddedServletOptions.java
  
  Index: EmbeddedServletOptions.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/EmbeddedServletOptions.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- EmbeddedServletOptions.java       19 Dec 2003 18:15:51 -0000      1.8
  +++ EmbeddedServletOptions.java       18 Feb 2004 21:22:21 -0000      1.9
  @@ -158,6 +158,8 @@
        */
       private boolean genStringAsCharArray = false;
   
  +    private boolean errorOnUseBeanInvalidClassAttribute = true;
  +
       /**
        * I want to see my generated servlets. Which directory are they
        * in?
  @@ -334,6 +336,13 @@
           return compiler;
       }
   
  +    public boolean getErrorOnUseBeanInvalidClassAttribute() {
  +        return errorOnUseBeanInvalidClassAttribute;
  +    }
  +
  +    public void setErrorOnUseBeanInvalidClassAttribute(boolean b) {
  +        errorOnUseBeanInvalidClassAttribute = b;
  +    }
   
       public TldLocationsCache getTldLocationsCache() {
        return tldLocationsCache;
  @@ -535,6 +544,20 @@
               } else {
                   if (log.isWarnEnabled()) {
                       log.warn(Localizer.getMessage("jsp.warning.genchararray"));
  +                }
  +            }
  +        }
  +
  +        String errBeanClass =
  +         config.getInitParameter("errorOnUseBeanInvalidClassAttribute");
  +        if (errBeanClass != null) {
  +            if (errBeanClass.equalsIgnoreCase("true")) {
  +                errorOnUseBeanInvalidClassAttribute = true;
  +            } else if (errBeanClass.equalsIgnoreCase("false")) {
  +                errorOnUseBeanInvalidClassAttribute = false;
  +            } else {
  +                if (log.isWarnEnabled()) {
  +                    log.warn(Localizer.getMessage("jsp.warning.errBean"));
                   }
               }
           }
  
  
  
  1.65      +12 -3     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java
  
  Index: JspC.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspC.java,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- JspC.java 21 Jan 2004 15:45:31 -0000      1.64
  +++ JspC.java 18 Feb 2004 21:22:21 -0000      1.65
  @@ -186,6 +186,7 @@
       private boolean classDebugInfo = true;
       private Vector extensions;
       private Vector pages = new Vector();
  +    private boolean errorOnUseBeanInvalidClassAttribute = true;
   
       /**
        * The java file encoding.  Default
  @@ -342,6 +343,14 @@
   
       public boolean isXpoweredBy() {
           return xpoweredBy;
  +    }
  +
  +    public boolean getErrorOnUseBeanInvalidClassAttribute() {
  +        return errorOnUseBeanInvalidClassAttribute;
  +    }
  +
  +    public void setErrorOnUseBeanInvalidClassAttribute(boolean b) {
  +        errorOnUseBeanInvalidClassAttribute = b;
       }
   
       public int getTagPoolSize() {
  
  
  
  1.22      +10 -3     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/Options.java
  
  Index: Options.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/Options.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- Options.java      5 Feb 2004 23:02:18 -0000       1.21
  +++ Options.java      18 Feb 2004 21:22:21 -0000      1.22
  @@ -77,6 +77,13 @@
   public interface Options {
   
       /**
  +     * Returns true if Jasper issues a compilation error instead of a runtime
  +     * Instantiation error if the class attribute specified in useBean action
  +     * is invalid.
  +     */
  +    public boolean getErrorOnUseBeanInvalidClassAttribute();
  +
  +    /**
        * Are we keeping generated code around?
        */
       public boolean getKeepGenerated();
  
  
  
  1.219     +38 -15    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.218
  retrieving revision 1.219
  diff -u -r1.218 -r1.219
  --- Generator.java    3 Feb 2004 08:27:43 -0000       1.218
  +++ Generator.java    18 Feb 2004 21:22:21 -0000      1.219
  @@ -1,4 +1,9 @@
   /*
  + * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  + */
  +
  +/*
    * $Header$
    * $Revision$
    * $Date$
  @@ -1246,20 +1251,38 @@
                   out.println(" not found within scope\");");
               } else {
                   /*
  -                 * Instantiate bean if not there
  +                 * Instantiate the bean if it is not in the specified scope.
                    */
  -                String className;
  -                if (beanName != null) {
  -                    if (beanName.isNamedAttribute()) {
  -                        // If the value for beanName was specified via
  -                        // jsp:attribute, first generate code to evaluate
  -                        // that body.
  -                        className =
  -                            generateNamedAttributeValue(
  -                                beanName.getNamedAttributeNode());
  +                boolean generateNew = false;
  +                if (beanName == null) {
  +                    try {
  +                        Class bean = ctxt.getClassLoader().loadClass(klass);
  +                        bean.newInstance();
  +                        generateNew = true;
  +                    } catch (Exception e) {
  +                        // Cannot instantiate the specified class
  +                        if 
(ctxt.getOptions().getErrorOnUseBeanInvalidClassAttribute()) {
  +                            err.jspError(n, "jsp.error.invalid.bean", klass);
  +                        }
  +                    }
  +                }
  +                if (!generateNew) {
  +                    String className;
  +                    if (beanName != null) {
  +                        if (beanName.isNamedAttribute()) {
  +                            // If the value for beanName was specified via
  +                            // jsp:attribute, first generate code to evaluate
  +                            // that body.
  +                            className =
  +                                generateNamedAttributeValue(
  +                                    beanName.getNamedAttributeNode());
  +                        } else {
  +                            className =
  +                                attributeValue(beanName, false, String.class);
  +                        }
                       } else {
  -                        className =
  -                            attributeValue(beanName, false, String.class);
  +                        // Implies klass is not null
  +                        className = quote(klass);
                       }
                       out.printil("try {");
                       out.pushIndent();
  
  
  
  1.140     +2 -1      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties
  
  Index: messages.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages.properties,v
  retrieving revision 1.139
  retrieving revision 1.140
  diff -u -r1.139 -r1.140
  --- messages.properties       7 Jan 2004 00:37:47 -0000       1.139
  +++ messages.properties       18 Feb 2004 21:22:21 -0000      1.140
  @@ -404,3 +404,4 @@
   jsp.error.prefix.refined=Attempt to redefine the prefix {0} to {1}, when it was 
already defined as {2} in the current scope.
   jsp.error.nested_jsproot=Nested <jsp:root>
   jsp.error.unbalanced.endtag=The end tag \"</{0}\" is unbalanced
  +jsp.error.invalid.bean=The value for the useBean class attribute {0} is invalid.
  
  
  
  1.47      +2 -1      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages_es.properties
  
  Index: messages_es.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages_es.properties,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -u -r1.46 -r1.47
  --- messages_es.properties    17 Jan 2004 02:38:32 -0000      1.46
  +++ messages_es.properties    18 Feb 2004 21:22:21 -0000      1.47
  @@ -405,3 +405,4 @@
   jsp.error.prefix.refined=Intento de redefinir el prefijo {0} por {1}, cuando ya 
estaba definido como {2} en el ámbito en curso.
   jsp.error.nested_jsproot=<jsp:root> anidado
   jsp.error.unbalanced.endtag=El tgag final \"</{0}\" está desequilibrado
  +jsp.error.invalid.bean=
  
  
  
  1.31      +2 -2      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages_fr.properties
  
  Index: messages_fr.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages_fr.properties,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- messages_fr.properties    4 Dec 2003 19:37:58 -0000       1.30
  +++ messages_fr.properties    18 Feb 2004 21:22:21 -0000      1.31
  @@ -298,4 +298,4 @@
   jsp.error.jspoutput.doctypepulicsystem=
   jsp.error.jspoutput.nonemptybody=
   jsp.error.jspoutput.invalidUse=
  -
  +jsp.error.invalid.bean=
  
  
  
  1.50      +2 -1      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages_ja.properties
  
  Index: messages_ja.properties
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/resources/messages_ja.properties,v
  retrieving revision 1.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- messages_ja.properties    14 Jan 2004 13:01:00 -0000      1.49
  +++ messages_ja.properties    18 Feb 2004 21:22:21 -0000      1.50
  @@ -401,3 +401,4 @@
   jsp.error.prefix.refined=\u30d7\u30ea\u30d5\u30a3\u30c3\u30af\u30b9 {0} 
\u304c\u73fe\u5728\u306e\u30b9\u30b3\u30fc\u30d7\u4e2d\u3067\u65e2\u306b {2} 
\u3068\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u306e\u3067 {1} 
\u306b\u518d\u5b9a\u7fa9\u3057\u307e\u3057\u305f
   jsp.error.nested_jsproot=\u5165\u308c\u5b50\u306b\u306a\u3063\u305f 
<jsp:root> \u3067\u3059
   jsp.error.unbalanced.endtag=\u7d42\u4e86\u30bf\u30b0 \"</{0}\" 
\u306e\u5bfe\u5fdc\u304c\u53d6\u308c\u3066\u3044\u307e\u305b\u3093
  +jsp.error.invalid.bean=
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to