Hi again - since no one voiced an opinion on the right way to 
approach this bug, I've done the simplest possible fix and attached a patch. 

This change will cause Jasper to always emit its own hardcoded values 
for the xmlns:jsp and version attributes of the <jsp:root> tag, ignoring any 
occurrences of those attributes in documents. This makes processing of 
JSP documents consistent whether they were specified in XML or JSP 
syntax. I also made the trivial fix to the double end tag problem.

I suspect that a more elaborate solution might be desirable for the version 
attribute, since if the document says it is version 1.3 (when we have such 
a version), but the compiler only handles 1.2, this ought to indicate a 
problem. But I'm not sure how to do that at this point, so this patch gets 
past the immediate problems that make valid documents unusable.

Cheers - Mark
Index: XmlOutputter.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/XmlOutputter.java,v
retrieving revision 1.15
diff -u -p --unified=5 -r1.15 XmlOutputter.java
--- XmlOutputter.java   2001/07/25 01:49:10     1.15
+++ XmlOutputter.java   2001/08/20 18:14:35
@@ -126,12 +126,12 @@ public class XmlOutputter {
     void addRootAttrs(Attributes attrs) {
        jspRootLevel++;
         int attrsLength = attrs.getLength();
         for (int i = 0; i < attrsLength; i++) {
            String qName = attrs.getQName(i);
-           if (attrs.getQName(i).startsWith("xmlns:jsp") 
-               && jspRootLevel > 1) continue; 
+           if ((qName.startsWith("xmlns:jsp") || 
+                qName.equals("version"))) continue; 
             rootAttrs.addAttribute(attrs.getURI(i), attrs.getLocalName(i),
                 attrs.getQName(i), attrs.getType(i), attrs.getValue(i));
         }
     }
 
@@ -142,18 +142,15 @@ public class XmlOutputter {
         rootAttrs.addAttribute("", "xmlns", "xmlns:" + prefix, "CDATA", uri);
      }
 
 
     /*
-     * Only put the </jsp:root> tag when we're dealing
-     * with the top level 'container' page.
+     * Don't append the root end tag here because the
+     * getPageData method will append it later.
      */
     void rootEnd() {
        jspRootLevel--;
-       if (jspRootLevel == 0) {
-           append("jsp:root");
-       }
     }
     
     /**
      * Append the cdata to the XML stream.
      */

Reply via email to