diff --git a/WHATSNEW b/WHATSNEW index c53f9b534..eacf34256 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -28,9 +28,8 @@ Other changes: Bugzilla 40019. * task now allows you to omit the web.xml file. as this is optional - in the servlet 2.5 and Java EE 5 APIs. If you do want a web.xml file, it - can be pulled in by any nested fileset or resource reference; the webxml - attribute is optional. + in the servlet 2.5 and Java EE 5 APIs. set needxmlfile="false" to + avoid a missing web.xml file from halting the build. * Diagnostics catches and logs security exceptions when accessing system properties. diff --git a/docs/manual/CoreTasks/war.html b/docs/manual/CoreTasks/war.html index 0ed78f46b..3f3926011 100644 --- a/docs/manual/CoreTasks/war.html +++ b/docs/manual/CoreTasks/war.html @@ -41,14 +41,17 @@ attributes of zipfilesets in a Zip or Jar task.)

Before Servlet API 2.5/Java EE 5, a WEB-INF/web.xml file was mandatory in a WAR file, so this task failed if the webxml attribute was missing. - As the web.xml file is now optional, the webxml attribute is now - downgraded to being optional. The task will warn if the file is not - included as an attribute or in a fileset, but still succeed. The task - will also complain if more than one web.xml file is added to the JAR. + As the web.xml file is now optional, the webxml attribute may now + be made optional. However, as most real web applications do need a web.xml file, + it is not optional by default. The task will fail if the file is not + included, unless the needxmlfile attribute + is set to true. The task + will warn if more than one web.xml file is added to the JAR + through the filesets.

-

Please note that the zip format allows multiple files of the same +

Please note that the Zip format allows multiple files of the same fully-qualified name to exist within a single archive. This has been documented as causing various problems for unsuspecting users. If you wish to avoid this behavior you must set the duplicate attribute @@ -73,8 +76,18 @@ to a value other than its default, "add".

webxml - The deployment descriptor to use (WEB-INF/web.xml). - No (since Ant1.7) + The servlet configuration descriptor to use (WEB-INF/web.xml). + Yes, unless needxmlfile is true, + the file is pulled in via a nested fileset, or an existing WAR file is + being updated. + + + needxmlfile + Flag to indicate whether or not the web.xml file is needed. + I=it should be set to false when generating + servlet 2.5+ WAR files without a web.xml file. + Since Ant 1.7 + No -default "true" basedir diff --git a/src/main/org/apache/tools/ant/taskdefs/War.java b/src/main/org/apache/tools/ant/taskdefs/War.java index 96d3fced6..0981f55fb 100644 --- a/src/main/org/apache/tools/ant/taskdefs/War.java +++ b/src/main/org/apache/tools/ant/taskdefs/War.java @@ -55,11 +55,15 @@ public class War extends Jar { /** * flag set if the descriptor is added */ - private boolean descriptorAdded; + private boolean needxmlfile=true; private File addedWebXmlFile; private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); - private static final String XML_DESCRIPTOR_PATH = "web-inf/web.xml"; + /** path to web.xml file */ + private static final String XML_DESCRIPTOR_PATH = "WEB-INF/web.xml"; + /** lower case version for comparisons */ + private static final String XML_DESCRIPTOR_PATH_LC = + XML_DESCRIPTOR_PATH.toLowerCase(Locale.ENGLISH); /** Constructor for the War Task. */ public War() { @@ -100,6 +104,15 @@ public class War extends Jar { super.addFileset(fs); } + + /** + * Set the policy on the web.xml file, that is, whether or not it is needed + * @param needxmlfile whether a web.xml file is needed. Default: true + */ + public void setNeedxmlfile(boolean needxmlfile) { + this.needxmlfile = needxmlfile; + } + /** * add files under WEB-INF/lib/ * @param fs the zip file set to add @@ -168,7 +181,7 @@ public class War extends Jar { String vPathLowerCase = vPath.toLowerCase(Locale.ENGLISH); //by default, we add the file. boolean addFile = true; - if (XML_DESCRIPTOR_PATH.equals(vPathLowerCase)) { + if (XML_DESCRIPTOR_PATH_LC.equals(vPathLowerCase)) { //a web.xml file was found. See if it is a duplicate or not if (addedWebXmlFile != null) { //a second web.xml file, so skip it @@ -189,7 +202,6 @@ public class War extends Jar { //there is no web.xml file, so add it addFile = true; //and remember that we did - descriptorAdded = true; deploymentDescriptor = file; } } @@ -204,10 +216,9 @@ public class War extends Jar { * gets executed. */ protected void cleanUp() { - if(addedWebXmlFile==null) { - log("No WEB-INF/web.xml file was added.\n" - +"This WAR file is only valid on Java EE 5+ runtimes\n" - +"and web servers that support v2.5 Web Applications"); + if(addedWebXmlFile==null && needxmlfile && !isInUpdateMode()) { + throw new BuildException("No WEB-INF/web.xml file was added.\n" + +"If this is your intent, set needxml='false' "); } addedWebXmlFile = null; super.cleanUp(); diff --git a/src/tests/antunit/taskdefs/war-test.xml b/src/tests/antunit/taskdefs/war-test.xml index 2a4281e96..8de6cdd2e 100644 --- a/src/tests/antunit/taskdefs/war-test.xml +++ b/src/tests/antunit/taskdefs/war-test.xml @@ -54,6 +54,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -83,7 +116,7 @@ Instead it pulls in --> - + @@ -91,11 +124,26 @@ - + + + + + + + + + + + + + + + + - + @@ -103,7 +151,7 @@ - +