From 9b0842fafa3bf3afe11438b6349ed55173cf4327 Mon Sep 17 00:00:00 2001 From: Tony Gravagno Date: Sun, 12 Jan 2020 19:16:19 -0800 Subject: [PATCH] Fix space issue in AntStructure.DTDPrinter Task AntStructure renders a project DTD. In AntStructure class DTDPrinter, line 327, a single statement is used to concatenate a list of enumerated values which are valid for an attribute. The list is enclosed in parentheses. At line 348 the string "#IMPLIED" is appended to all attribute definitions regardless of type. For other types like Boolean and CDATA, a space is appended. Not for these enumerations. This results in a DTD validation error. Ref [XERCES definition](https://xerces.apache.org/xerces-j/apiDocs/org/apache/xerces/utils/XMLMessages.html#MSG_SPACE_REQUIRED_BEFORE_DEFAULTDECL_IN_ATTDEF) The full message displayed in VSCode may be different from elsewhere: White space is required before the attribute default in the declaration of attribute "x" for element "y". xml(MSG_SPACE_REQUIRED_BEFORE_DEFAULTDECL_IN_ATTDEF) This simple one-line change appends the space character required to avoid that error. **Note:** This should not be modified into a change on the `joinAlts` Collector which surrounds values in parentheses. That Collector is used elsewhere where regex syntax is applied immediately after. See line 298. That asterisk cannot be separated from the values with a space. The space must only be applied to line 327. --- CONTRIBUTORS | 1 + WHATSNEW | 3 +++ contributors.xml | 4 ++++ src/main/org/apache/tools/ant/taskdefs/AntStructure.java | 4 ++-- 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index a831e8fe9..4b21cf7ea 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -433,6 +433,7 @@ Tom Eugelink Tom May Tomasz Bech Tomáš Zezula +Tony Gravagno Trejkaz Xaoza Ulrich Schmidt Uwe Schindler diff --git a/WHATSNEW b/WHATSNEW index 23b8e49d3..2cb3c21a0 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -34,6 +34,9 @@ Fixed bugs: then the forked mode launch would fail. Bugzilla Report 63958 + * Fixes an issue in AntStructure where an incorrect DTD was being generated. + Github Pull Request #116 + Other changes: -------------- diff --git a/contributors.xml b/contributors.xml index 4e88f276c..8de1b86d1 100644 --- a/contributors.xml +++ b/contributors.xml @@ -1783,6 +1783,10 @@ Tomáš Zezula + + Tony + Gravagno + Trejkaz Xaoza diff --git a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java index 9a7267956..4d8909b7b 100644 --- a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java +++ b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java @@ -324,7 +324,7 @@ public class AntStructure extends Task { || !areNmtokens(values)) { sb.append("CDATA "); } else { - sb.append(Stream.of(values).collect(joinAlts)); + sb.append(Stream.of(values).collect(joinAlts)).append(" "); } } catch (final InstantiationException | IllegalAccessException ie) { sb.append("CDATA "); @@ -337,7 +337,7 @@ public class AntStructure extends Task { sb.append("CDATA "); } else { sb.append(Stream.of(values).map(Enum::name) - .collect(joinAlts)); + .collect(joinAlts)).append(" "); } } catch (final Exception x) { sb.append("CDATA ");