luehe 2002/08/21 10:05:52 Modified: jasper2/src/share/org/apache/jasper JspCompilationContext.java jasper2/src/share/org/apache/jasper/compiler TagFileProcessor.java Validator.java jasper2/src/share/org/apache/jasper/resources messages.properties messages_es.properties messages_ja.properties jasper2/src/share/org/apache/jasper/servlet JspServletWrapper.java Log: Implemented requirement that one <jsp:param> element must be present for each variable declared using the variable directive that has a 'fragment' attribute equal to the name of the fragment being invoked. Revision Changes Path 1.18 +11 -4 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspCompilationContext.java Index: JspCompilationContext.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspCompilationContext.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- JspCompilationContext.java 20 Aug 2002 23:35:30 -0000 1.17 +++ JspCompilationContext.java 21 Aug 2002 17:05:52 -0000 1.18 @@ -66,7 +66,7 @@ import java.util.*; import javax.servlet.ServletContext; import javax.servlet.jsp.tagext.TagInfo; - +import javax.servlet.jsp.tagext.TagData; import org.apache.jasper.compiler.JspRuntimeContext; import org.apache.jasper.compiler.JspReader; import org.apache.jasper.compiler.ServletWriter; @@ -123,6 +123,7 @@ protected boolean isTagFile; protected TagInfo tagInfo; + protected TagData tagData; // jspURI _must_ be relative to the context public JspCompilationContext(String jspUri, @@ -157,6 +158,7 @@ public JspCompilationContext(String tagfile, TagInfo tagInfo, + TagData tagData, Options options, ServletContext context, JspServletWrapper jsw, @@ -166,6 +168,7 @@ this(tagfile, false, options, context, jsw, rctxt); this.isTagFile = true; this.tagInfo = tagInfo; + this.tagData = tagData; this.tagFileJars = tagFileJars; if (tagFileJars != null && tagFileJars.get(tagfile) != null) { isPackagedTagFile = true; @@ -357,6 +360,10 @@ public TagInfo getTagInfo() { return tagInfo; + } + + public TagData getTagData() { + return tagData; } /** 1.16 +7 -4 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java Index: TagFileProcessor.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- TagFileProcessor.java 20 Aug 2002 23:35:30 -0000 1.15 +++ TagFileProcessor.java 21 Aug 2002 17:05:52 -0000 1.16 @@ -333,7 +333,8 @@ * Compiles and loads a tagfile. */ public static Class loadTagFile(JspCompilationContext ctxt, - String tagFilePath, TagInfo tagInfo) + String tagFilePath, TagInfo tagInfo, + TagData tagData) throws JasperException { JspRuntimeContext rctxt = ctxt.getRuntimeContext(); @@ -347,6 +348,7 @@ ctxt.getOptions(), tagFilePath, tagInfo, + tagData, ctxt.getRuntimeContext(), ctxt.getTagFileJars()); } @@ -372,7 +374,8 @@ TagFileInfo tagFileInfo = n.getTagFileInfo(); if (tagFileInfo != null) { String tagFilePath = tagFileInfo.getPath(); - Class c = loadTagFile(ctxt, tagFilePath, n.getTagInfo()); + Class c = loadTagFile(ctxt, tagFilePath, n.getTagInfo(), + n.getTagData()); n.setTagHandlerClass(c); } } 1.25 +57 -15 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Validator.java Index: Validator.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Validator.java,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- Validator.java 21 Aug 2002 16:21:56 -0000 1.24 +++ Validator.java 21 Aug 2002 17:05:52 -0000 1.25 @@ -66,17 +66,9 @@ import java.util.HashMap; import java.util.Enumeration; +import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.el.FunctionMapper; -import javax.servlet.jsp.tagext.FunctionInfo; -import javax.servlet.jsp.tagext.PageData; -import javax.servlet.jsp.tagext.JspFragment; -import javax.servlet.jsp.tagext.TagData; -import javax.servlet.jsp.tagext.TagInfo; -import javax.servlet.jsp.tagext.TagAttributeInfo; -import javax.servlet.jsp.tagext.TagLibraryInfo; -import javax.servlet.jsp.tagext.ValidationMessage; - import org.apache.jasper.Constants; import org.apache.jasper.JasperException; @@ -303,10 +295,10 @@ private PageInfo pageInfo; private ErrorDispatcher err; + private TagInfo tagInfo; + private TagData tagData; - /** - * A FunctionMapper, used to validate EL expressions. - */ + // A FunctionMapper, used to validate EL expressions. private FunctionMapper functionMapper; private static final JspUtil.ValidAttribute[] jspRootAttrs = { @@ -387,6 +379,8 @@ ValidateVisitor(Compiler compiler) { this.pageInfo = compiler.getPageInfo(); this.err = compiler.getErrorDispatcher(); + this.tagInfo = compiler.getCompilationContext().getTagInfo(); + this.tagData = compiler.getCompilationContext().getTagData(); this.functionMapper = new ValidatorFunctionMapper( this.pageInfo, this.err ); } @@ -853,11 +847,59 @@ } public void visit(Node.InvokeAction n) throws JasperException { + JspUtil.checkAttributes("Invoke", n, invokeAttrs, err); if (n.getAttributeValue("var") != null && n.getAttributeValue("varReader") != null) { err.jspError(n, "jsp.error.invoke.varAndVarReader"); } + + Node.Nodes subelements = n.getBody(); + if (subelements != null) { + for (int i=0; i<subelements.size(); i++) { + Node subelem = subelements.getNode(i); + if (!(subelem instanceof Node.ParamAction)) { + err.jspError(n, "jsp.error.invoke.invalidBodyContent"); + } + } + } + + /* + * One <jsp:param> element must be present for each variable + * declared using the variable directive that has a 'fragment' + * attribute equal to the name of the fragment being invoked. + */ + TagVariableInfo[] tagVars = tagInfo.getTagVariableInfos(); + if (tagVars != null) { + String frag = n.getAttributeValue("fragment"); + for (int i=0; i<tagVars.length; i++) { + String varName = tagVars[i].getNameGiven(); + if (varName == null) { + varName = tagData.getAttributeString( + tagVars[i].getNameFromAttribute()); + } + String tagVarFrag = tagVars[i].getFragment(); + if (tagVarFrag == null || !tagVarFrag.equals(frag)) + continue; + if (subelements == null) { + err.jspError(n, "jsp.error.invoke.missingParam", + varName); + } + boolean found = false; + for (int j=0; j<subelements.size() && !found; j++) { + Node subelem = subelements.getNode(j); + String paramName = subelem.getAttributeValue("name"); + if (varName.equals(paramName)) { + found = true; + } + } + if (!found) { + err.jspError(n, "jsp.error.invoke.missingParam", + varName); + } + } + } + visitBody(n); } 1.28 +3 -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.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- messages.properties 21 Aug 2002 16:21:56 -0000 1.27 +++ messages.properties 21 Aug 2002 17:05:52 -0000 1.28 @@ -288,6 +288,8 @@ jsp.error.fragmentwithrtexprvalue=Cannot specify both 'fragment' and 'rtexprvalue' attributes. If 'fragment' is present, 'rtexprvalue' is fixed as 'true' jsp.error.fragmentWithDeclareOrScope=Both 'fragment' and 'declare' or 'scope' attributes specified in variable directive jsp.error.invoke.varAndVarReader=Both 'var' and 'varReader' specified in jsp:invoke +jsp.error.invoke.invalidBodyContent=jsp:invoke contains body content other than whitespace and jsp:param subelements +jsp.error.invoke.missingParam=Missing jsp:param subelement for variable {0} jsp.error.doBody.varAndVarReader=Both 'var' and 'varReader' specified in jsp:doBody 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}. 1.8 +3 -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.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- messages_es.properties 20 Aug 2002 23:44:29 -0000 1.7 +++ messages_es.properties 21 Aug 2002 17:05:52 -0000 1.8 @@ -215,3 +215,5 @@ jsp.error.invoke.varAndVarReader= jsp.error.doBody.varAndVarReader= jsp.warning.bad.urlpattern.propertygroup= +jsp.error.invoke.invalidBodyContent= +jsp.error.invoke.missingParam= 1.7 +3 -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.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- messages_ja.properties 20 Aug 2002 23:44:29 -0000 1.6 +++ messages_ja.properties 21 Aug 2002 17:05:52 -0000 1.7 @@ -247,3 +247,5 @@ jsp.error.invoke.varAndVarReader= jsp.error.doBody.varAndVarReader= jsp.warning.bad.urlpattern.propertygroup= +jsp.error.invoke.invalidBodyContent= +jsp.error.invoke.missingParam= 1.14 +14 -13 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java Index: JspServletWrapper.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- JspServletWrapper.java 20 Aug 2002 23:35:30 -0000 1.13 +++ JspServletWrapper.java 21 Aug 2002 17:05:52 -0000 1.14 @@ -59,6 +59,13 @@ package org.apache.jasper.servlet; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.util.Hashtable; +import java.net.URL; +import java.net.URLClassLoader; +import java.net.MalformedURLException; + import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.ServletConfig; @@ -69,13 +76,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.tagext.TagInfo; - -import java.io.IOException; -import java.io.FileNotFoundException; -import java.util.Hashtable; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.MalformedURLException; +import javax.servlet.jsp.tagext.TagData; import org.apache.jasper.JasperException; import org.apache.jasper.Constants; @@ -83,7 +84,6 @@ import org.apache.jasper.JspCompilationContext; import org.apache.jasper.compiler.JspRuntimeContext; import org.apache.jasper.runtime.HttpJspBase; - import org.apache.jasper.logging.Logger; /** @@ -135,13 +135,14 @@ */ public JspServletWrapper(ServletContext servletContext, Options options, String tagFilePath, TagInfo tagInfo, - JspRuntimeContext rctxt, Hashtable tagFileJars) + TagData tagData, JspRuntimeContext rctxt, + Hashtable tagFileJars) throws JasperException { this.config = null; // not used this.options = options; this.jspUri = tagFilePath; - ctxt = new JspCompilationContext(jspUri, tagInfo, options, + ctxt = new JspCompilationContext(jspUri, tagInfo, tagData, options, servletContext, this, rctxt, tagFileJars);
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>