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