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: [email protected]
For additional commands, e-mail: [email protected]