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]