Author: markt
Date: Tue Feb 11 14:12:06 2014
New Revision: 1567144

URL: http://svn.apache.org/r1567144
Log:
Generate a valid root element for all possible versions of web.xml

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/XmlIdentifiers.java
    tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java
    tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java

Modified: 
tomcat/trunk/java/org/apache/tomcat/util/descriptor/XmlIdentifiers.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/XmlIdentifiers.java?rev=1567144&r1=1567143&r2=1567144&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/XmlIdentifiers.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/XmlIdentifiers.java Tue 
Feb 11 14:12:06 2014
@@ -49,36 +49,29 @@ public final class XmlIdentifiers {
             "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd";;
 
     // from J2EE 1.4
-    public static final String WEB_24_XSD =
-            "http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";;
-    public static final String TLD_20_XSD =
-            "http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd";;
+    public static final String JAVAEE_1_4_NS = 
"http://java.sun.com/xml/ns/j2ee";;
+    public static final String WEB_24_XSD = JAVAEE_1_4_NS + "/web-app_2_4.xsd";
+    public static final String TLD_20_XSD = JAVAEE_1_4_NS + 
"/web-jsptaglibrary_2_0.xsd";
     public static final String WEBSERVICES_11_XSD =
             "http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd";;
 
     // from JavaEE 5
-    public static final String WEB_25_XSD =
-            "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";;
-    public static final String TLD_21_XSD =
-            "http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd";;
-    public static final String WEBSERVICES_12_XSD =
-            "http://java.sun.com/xml/ns/javaee/javaee_web_services_1_2.xsd";;
+    public static final String JAVAEE_5_NS = 
"http://java.sun.com/xml/ns/javaee";;
+    public static final String WEB_25_XSD = JAVAEE_5_NS + "/web-app_2_5.xsd";
+    public static final String TLD_21_XSD = JAVAEE_5_NS + 
"/web-jsptaglibrary_2_1.xsd";
+    public static final String WEBSERVICES_12_XSD = JAVAEE_5_NS + 
"javaee_web_services_1_2.xsd";
 
     // from JavaEE 6
-    public static final String WEB_30_XSD =
-            "http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd";;
-    public static final String WEB_FRAGMENT_30_XSD =
-            "http://java.sun.com/xml/ns/javaee/web-fragment_3_0.xsd";;
-    public static final String WEBSERVICES_13_XSD =
-            "http://java.sun.com/xml/ns/javaee/javaee_web_services_1_3.xsd";;
+    public static final String JAVAEE_6_NS = JAVAEE_5_NS;
+    public static final String WEB_30_XSD = JAVAEE_6_NS + "/web-app_3_0.xsd";
+    public static final String WEB_FRAGMENT_30_XSD = JAVAEE_6_NS + 
"/web-fragment_3_0.xsd";
+    public static final String WEBSERVICES_13_XSD = JAVAEE_6_NS + 
"/javaee_web_services_1_3.xsd";
 
     // from JavaEE 7
-    public static final String WEB_31_XSD =
-            "http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd";;
-    public static final String WEB_FRAGMENT_31_XSD =
-            "http://xmlns.jcp.org/xml/ns/javaee/web-fragment_3_1.xsd";;
-    public static final String WEBSERVICES_14_XSD =
-            "http://xmlns.jcp.org/xml/ns/javaee/javaee_web_services_1_4.xsd";;
+    public static final String JAVAEE_7_NS = 
"http://xmlns.jcp.org/xml/ns/javaee";;
+    public static final String WEB_31_XSD = JAVAEE_7_NS + "/web-app_3_1.xsd";
+    public static final String WEB_FRAGMENT_31_XSD = JAVAEE_7_NS + 
"/web-fragment_3_1.xsd";
+    public static final String WEBSERVICES_14_XSD = JAVAEE_7_NS + 
"/javaee_web_services_1_4.xsd";
 
     private XmlIdentifiers() {
     }

Modified: tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java?rev=1567144&r1=1567143&r2=1567144&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/WebXml.java Tue Feb 
11 14:12:06 2014
@@ -637,16 +637,55 @@ public class WebXml {
         sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
 
         // Root element
-        sb.append("<web-app xmlns=\"http://xmlns.jcp.org/xml/ns/javaee\"\n";);
-        sb.append("         xmlns:xsi=");
-        sb.append("\"http://www.w3.org/2001/XMLSchema-instance\"\n";);
-        sb.append("         xsi:schemaLocation=");
-        sb.append("\"http://xmlns.jcp.org/xml/ns/javaee"; +
-                  " http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd\"\n";);
-        sb.append("         version=\"");
-        sb.append(getVersion());
-        sb.append("\"\n");
-        sb.append("         metadata-complete=\"true\">\n\n");
+        if (publicId != null) {
+            sb.append("<!DOCTYPE web-app PUBLIC\n");
+            sb.append("  \"");
+            sb.append(publicId);
+            sb.append("\"\n");
+            sb.append("  \"");
+            if (XmlIdentifiers.WEB_22_PUBLIC.equals(publicId)) {
+                sb.append(XmlIdentifiers.WEB_22_SYSTEM);
+            } else {
+                sb.append(XmlIdentifiers.WEB_23_SYSTEM);
+            }
+            sb.append("\">\n");
+            sb.append("<web-app>");
+        } else {
+            String javaeeNamespace = null;
+            String webXmlSchemaLocation = null;
+            String version = getVersion();
+            if ("2.4".equals(version)) {
+                javaeeNamespace = XmlIdentifiers.JAVAEE_1_4_NS;
+                webXmlSchemaLocation = XmlIdentifiers.WEB_24_XSD;
+            } else if ("2.5".equals(version)) {
+                javaeeNamespace = XmlIdentifiers.JAVAEE_5_NS;
+                webXmlSchemaLocation = XmlIdentifiers.WEB_25_XSD;
+            } else if ("3.0".equals(version)) {
+                javaeeNamespace = XmlIdentifiers.JAVAEE_6_NS;
+                webXmlSchemaLocation = XmlIdentifiers.WEB_30_XSD;
+            } else if ("3.1".equals(version)) {
+                javaeeNamespace = XmlIdentifiers.JAVAEE_7_NS;
+                webXmlSchemaLocation = XmlIdentifiers.WEB_31_XSD;
+            }
+            sb.append("<web-app xmlns=\"");
+            sb.append(javaeeNamespace);
+            sb.append("\"\n");
+            sb.append("         xmlns:xsi=");
+            sb.append("\"http://www.w3.org/2001/XMLSchema-instance\"\n";);
+            sb.append("         xsi:schemaLocation=\"");
+            sb.append(javaeeNamespace);
+            sb.append(" ");
+            sb.append(webXmlSchemaLocation);
+            sb.append("\"\n");
+            sb.append("         version=\"");
+            sb.append(getVersion());
+            sb.append("\"");
+            if ("2.4".equals(version)) {
+                sb.append(">\n\n");
+            } else {
+                sb.append("\n         metadata-complete=\"true\">\n\n");
+            }
+        }
 
         appendElement(sb, INDENT2, "display-name", displayName);
 
@@ -781,23 +820,25 @@ public class WebXml {
             sb.append("  <session-config>\n");
             appendElement(sb, INDENT4, "session-timeout",
                     sessionConfig.getSessionTimeout());
-            sb.append("    <cookie-config>\n");
-            appendElement(sb, INDENT6, "name", sessionConfig.getCookieName());
-            appendElement(sb, INDENT6, "domain",
-                    sessionConfig.getCookieDomain());
-            appendElement(sb, INDENT6, "path", sessionConfig.getCookiePath());
-            appendElement(sb, INDENT6, "comment",
-                    sessionConfig.getCookieComment());
-            appendElement(sb, INDENT6, "http-only",
-                    sessionConfig.getCookieHttpOnly());
-            appendElement(sb, INDENT6, "secure",
-                    sessionConfig.getCookieSecure());
-            appendElement(sb, INDENT6, "max-age",
-                    sessionConfig.getCookieMaxAge());
-            sb.append("    </cookie-config>\n");
-            for (SessionTrackingMode stm :
-                    sessionConfig.getSessionTrackingModes()) {
-                appendElement(sb, INDENT4, "tracking-mode", stm.name());
+            if (majorVersion >= 3) {
+                sb.append("    <cookie-config>\n");
+                appendElement(sb, INDENT6, "name", 
sessionConfig.getCookieName());
+                appendElement(sb, INDENT6, "domain",
+                        sessionConfig.getCookieDomain());
+                appendElement(sb, INDENT6, "path", 
sessionConfig.getCookiePath());
+                appendElement(sb, INDENT6, "comment",
+                        sessionConfig.getCookieComment());
+                appendElement(sb, INDENT6, "http-only",
+                        sessionConfig.getCookieHttpOnly());
+                appendElement(sb, INDENT6, "secure",
+                        sessionConfig.getCookieSecure());
+                appendElement(sb, INDENT6, "max-age",
+                        sessionConfig.getCookieMaxAge());
+                sb.append("    </cookie-config>\n");
+                for (SessionTrackingMode stm :
+                        sessionConfig.getSessionTrackingModes()) {
+                    appendElement(sb, INDENT4, "tracking-mode", stm.name());
+                }
             }
             sb.append("  </session-config>\n\n");
         }

Modified: 
tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java?rev=1567144&r1=1567143&r2=1567144&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/util/descriptor/web/TestWebXml.java Tue 
Feb 11 14:12:06 2014
@@ -16,6 +16,8 @@
  */
 package org.apache.tomcat.util.descriptor.web;
 
+import java.io.IOException;
+import java.io.StringReader;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -23,8 +25,13 @@ import java.util.Set;
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.tomcat.util.descriptor.DigesterFactory;
+import org.apache.tomcat.util.descriptor.XmlErrorHandler;
 import org.apache.tomcat.util.descriptor.XmlIdentifiers;
+import org.apache.tomcat.util.digester.Digester;
 
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
 
 /**
  * Test case for {@link WebXml}.
@@ -123,6 +130,63 @@ public class TestWebXml {
     }
 
     @Test
+    public void testValidateVerion22() throws IOException, SAXException {
+        doTestValidateVersion("2.2");
+    }
+
+    @Test
+    public void testValidateVerion23() throws IOException, SAXException {
+        doTestValidateVersion("2.3");
+    }
+
+    @Test
+    public void testValidateVerion24() throws IOException, SAXException {
+        doTestValidateVersion("2.4");
+    }
+
+    @Test
+    public void testValidateVerion25() throws IOException, SAXException {
+        doTestValidateVersion("2.5");
+    }
+
+    @Test
+    public void testValidateVerion30() throws IOException, SAXException {
+        doTestValidateVersion("3.0");
+    }
+
+    @Test
+    public void testValidateVerion31() throws IOException, SAXException {
+        doTestValidateVersion("3.1");
+    }
+
+    private void doTestValidateVersion(String version) throws IOException, 
SAXException {
+        WebXml webxml = new WebXml();
+
+        // Special cases
+        if ("2.2".equals(version)) {
+            webxml.setPublicId(XmlIdentifiers.WEB_22_PUBLIC);
+        } else if ("2.3".equals(version)) {
+            webxml.setPublicId(XmlIdentifiers.WEB_23_PUBLIC);
+        } else {
+            webxml.setVersion(version);
+        }
+
+        Digester digester = DigesterFactory.newDigester(true, true, new 
WebRuleSet(), true);
+
+        XmlErrorHandler handler = new XmlErrorHandler();
+        digester.setErrorHandler(handler);
+
+        System.out.print(webxml.toXml() + "\n\n\n");
+
+        InputSource is = new InputSource(new StringReader(webxml.toXml()));
+        digester.push(new WebXml());
+        digester.parse(is);
+
+        Assert.assertEquals(0, handler.getErrors().size());
+        Assert.assertEquals(0, handler.getWarnings().size());
+    }
+
+    @Test
     public void testLifecycleMethodsWebXml() {
         WebXml webxml = new WebXml();
         webxml.addPostConstructMethods("a", "a");



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to