diff --git a/CONTRIBUTORS b/CONTRIBUTORS index b6ade3e2e..a171f4b8d 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -138,6 +138,7 @@ Jesse Glick Jesse Stockall Jim Allers Joerg Wassmer +Joey Richey John Sisson Jon Dickinson Jon S. Stevens diff --git a/WHATSNEW b/WHATSNEW index f6b3d8b7a..e78abae3d 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -282,6 +282,9 @@ Other changes: an URL. Bugzilla Report 28881 + * now supports XML namespaces. + Bugzilla Report 36804. + Changes from Ant 1.7.0 TO Ant 1.7.1 ============================================= diff --git a/contributors.xml b/contributors.xml index 03e1bda0a..755af007e 100644 --- a/contributors.xml +++ b/contributors.xml @@ -580,6 +580,10 @@ Joerg Wassmer + + Joey + Richey + Jon Dickinson diff --git a/docs/manual/CoreTasks/echoxml.html b/docs/manual/CoreTasks/echoxml.html index f3ddaf15f..e22478f9e 100644 --- a/docs/manual/CoreTasks/echoxml.html +++ b/docs/manual/CoreTasks/echoxml.html @@ -45,6 +45,14 @@ Whether to append file, if specified. No + + namespacePolicy + Sets the namespace policy as defined + by org.apache.tools.ant.util.DOMElementWriter.XmlNamespacePolicy. Valid + values are "ignore," "elementsOnly," or "all." Default is + "ignore". + No +

Parameters specified as nested elements

Nested XML content is required. diff --git a/src/main/org/apache/tools/ant/taskdefs/EchoXML.java b/src/main/org/apache/tools/ant/taskdefs/EchoXML.java index dfcaf2a85..3a11527ef 100755 --- a/src/main/org/apache/tools/ant/taskdefs/EchoXML.java +++ b/src/main/org/apache/tools/ant/taskdefs/EchoXML.java @@ -23,6 +23,7 @@ import java.io.FileOutputStream; import org.apache.tools.ant.Project; import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.types.EnumeratedAttribute; import org.apache.tools.ant.util.XMLFragment; import org.apache.tools.ant.util.DOMElementWriter; import org.apache.tools.ant.util.FileUtils; @@ -35,7 +36,6 @@ import org.w3c.dom.Element; * * Known limitations: *
    - *
  1. Currently no XMLNS support
  2. *
  3. Processing Instructions get ignored
  4. *
  5. Encoding is always UTF-8
  6. *
@@ -46,6 +46,7 @@ public class EchoXML extends XMLFragment { private File file; private boolean append; + private NamespacePolicy namespacePolicy = NamespacePolicy.DEFAULT; private static final String ERROR_NO_XML = "No nested XML specified"; /** @@ -56,6 +57,16 @@ public class EchoXML extends XMLFragment { file = f; } + /** + * Set the namespace policy for the xml file + * @param s namespace policy: "ignore," "elementsOnly," or "all" + * @see + * org.apache.tools.ant.util.DOMElementWriter.XmlNamespacePolicy + */ + public void setNamespacePolicy(NamespacePolicy n) { + namespacePolicy = n; + } + /** * Set whether to append the output file. * @param b boolean append flag. @@ -68,7 +79,8 @@ public class EchoXML extends XMLFragment { * Execute the task. */ public void execute() { - DOMElementWriter writer = new DOMElementWriter(!append); + DOMElementWriter writer = + new DOMElementWriter(!append, namespacePolicy.getPolicy()); OutputStream os = null; try { if (file != null) { @@ -90,4 +102,36 @@ public class EchoXML extends XMLFragment { } } + public static class NamespacePolicy extends EnumeratedAttribute { + private static final String IGNORE = "ignore"; + private static final String ELEMENTS = "elementsOnly"; + private static final String ALL = "all"; + + public static final NamespacePolicy DEFAULT + = new NamespacePolicy(IGNORE); + + public NamespacePolicy() {} + + public NamespacePolicy(String s) { + setValue(s); + } + /** {@inheritDoc}. */ + public String[] getValues() { + return new String[] {IGNORE, ELEMENTS, ALL}; + } + + public DOMElementWriter.XmlNamespacePolicy getPolicy() { + String s = getValue(); + if (IGNORE.equalsIgnoreCase(s)) { + return DOMElementWriter.XmlNamespacePolicy.IGNORE; + } else if (ELEMENTS.equalsIgnoreCase(s)) { + return + DOMElementWriter.XmlNamespacePolicy.ONLY_QUALIFY_ELEMENTS; + } else if (ALL.equalsIgnoreCase(s)) { + return DOMElementWriter.XmlNamespacePolicy.QUALIFY_ALL; + } else { + throw new BuildException("Invalid namespace policy: " + s); + } + } + } } diff --git a/src/tests/antunit/taskdefs/echoxml-test.xml b/src/tests/antunit/taskdefs/echoxml-test.xml index 2b9e906c2..0a159c365 100644 --- a/src/tests/antunit/taskdefs/echoxml-test.xml +++ b/src/tests/antunit/taskdefs/echoxml-test.xml @@ -56,10 +56,35 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + +