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]