Author: remm
Date: Thu Nov  2 14:56:45 2006
New Revision: 470584

URL: http://svn.apache.org/viewvc?view=rev&rev=470584
Log:
- Add translation time type checks for String.

Modified:
    tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Validator.java
    
tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties

Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Validator.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Validator.java?view=diff&rev=470584&r1=470583&r2=470584
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Validator.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/Validator.java Thu Nov 
 2 14:56:45 2006
@@ -36,6 +36,7 @@
 import javax.servlet.jsp.tagext.TagLibraryInfo;
 import javax.servlet.jsp.tagext.ValidationMessage;
 
+import org.apache.el.lang.ELSupport;
 import org.apache.jasper.Constants;
 import org.apache.jasper.JasperException;
 import org.apache.jasper.JspCompilationContext;
@@ -1037,12 +1038,6 @@
                             }
                         }
                         
-                        /*System.out.println("attrs.getLocalName(i): " + 
attrs.getLocalName(i));
-                        System.out.println("tldAttrs[j].canBeRequestTime(): " 
+ tldAttrs[j].canBeRequestTime());
-                        System.out.println("expression: " + expression);
-                        System.out.println("tldAttrs[j].isDeferredMethod(): " 
+ tldAttrs[j].isDeferredMethod());
-                        System.out.println("tldAttrs[j].isDeferredValue(): " + 
tldAttrs[j].isDeferredValue());*/
-                        
                         if (tldAttrs[j].canBeRequestTime()
                                 || tldAttrs[j].isDeferredMethod() || 
tldAttrs[j].isDeferredValue()) { // JSP 2.1
                             
@@ -1053,15 +1048,42 @@
                                             tldAttrs[j].getName());
                                 }
                                 
+                                String expectedType = null;
                                 if (tldAttrs[j].isDeferredMethod()) {
                                     // The String litteral must be castable to 
what is declared as type
                                     // for the attribute
-                                    
+                                    String m = 
tldAttrs[j].getMethodSignature();
+                                    if (m != null) {
+                                        int rti = m.trim().indexOf(' ');
+                                        if (rti > 0) {
+                                            expectedType = m.substring(0, 
rti).trim();
+                                        }
+                                    } else {
+                                        expectedType = "java.lang.Object";
+                                    }
                                 }
                                 if (tldAttrs[j].isDeferredValue()) {
                                     // The String litteral must be castable to 
what is declared as type
                                     // for the attribute
-                                    
+                                    expectedType = 
tldAttrs[j].getExpectedTypeName();
+                                }
+                                if (expectedType != null) {
+                                    Class expectedClass = String.class;
+                                    try {
+                                        expectedClass = 
JspUtil.toClass(expectedType, loader);
+                                    } catch (ClassNotFoundException e) {
+                                        err.jspError
+                                            (n, 
"jsp.error.unknown_attribute_type",
+                                             tldAttrs[j].getName(), 
expectedType);
+                                    }
+                                    // Check casting
+                                    try {
+                                        
ELSupport.coerceToType(attrs.getValue(i), expectedClass);
+                                    } catch (Exception e) {
+                                        err.jspError
+                                            (n, "jsp.error.coerce_to_type",
+                                             tldAttrs[j].getName(), 
expectedType, attrs.getValue(i));
+                                    }
                                 }
 
                                 jspAttrs[i] = new 
Node.JspAttribute(tldAttrs[j],

Modified: 
tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties?view=diff&rev=470584&r1=470583&r2=470584
==============================================================================
--- 
tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties 
(original)
+++ 
tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties 
Thu Nov  2 14:56:45 2006
@@ -337,6 +337,7 @@
 jsp.error.missing_var_or_varReader=Missing \'var\' or \'varReader\' attribute
 jsp.warning.bad.urlpattern.propertygroup=Bad value {0} in the url-pattern 
subelement in web.xml
 jsp.error.unknown_attribute_type=Unknown attribute type ({1}) for attribute 
{0}.
+jsp.error.coerce_to_type=Cannot coerce value ({2}) to type ({1}) for attribute 
{0}.
 jsp.error.jspelement.missing.name=Mandatory XML-style \'name\' attribute 
missing
 jsp.error.xmlns.redefinition.notimplemented=Internal error: Attempt to 
redefine xmlns:{0}.  Redefinition of namespaces is not implemented.
 jsp.error.could.not.add.taglibraries=Could not add one or more tag libraries.



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

Reply via email to