Encode usual XML reserved characters

See gh-1073
This commit is contained in:
Jafer Khan
2020-03-24 02:56:58 +05:00
committed by Stephane Nicoll
parent f860bf997c
commit 0cdf11e467
2 changed files with 57 additions and 1 deletions

View File

@@ -486,7 +486,7 @@ public class MavenBuildWriter {
private void writeSingleElement(IndentingWriter writer, String name, String text) {
if (text != null) {
writer.print(String.format("<%s>", name));
writer.print(text);
writer.print(escapeString(text));
writer.println(String.format("</%s>", name));
}
}
@@ -516,4 +516,32 @@ public class MavenBuildWriter {
}
}
private String escapeString(String inputString) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < inputString.length(); i++) {
char character = inputString.charAt(i);
switch (character) {
case '\'':
stringBuilder.append("&apos;");
break;
case '\"':
stringBuilder.append("&quot;");
break;
case '<':
stringBuilder.append("&lt;");
break;
case '>':
stringBuilder.append("&gt;");
break;
case '&':
stringBuilder.append("&amp;");
break;
default:
stringBuilder.append(character);
}
}
return stringBuilder.toString();
}
}

View File

@@ -817,6 +817,27 @@ class MavenBuildWriterTests {
});
}
@Test
void pomWithEscapedCharacters() {
MavenBuild build = new MavenBuild();
build.settings().coordinates("com.example.demo", "demo").name("<demo project>")
.description("A \"demo\" project for 'developers' & 'testers'");
generatePomString(build, (pomString) -> {
String separator = System.lineSeparator();
assertThat(pomString).isEqualTo("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + separator
+ "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
+ separator
+ " xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">"
+ separator + " <modelVersion>4.0.0</modelVersion>" + separator
+ " <groupId>com.example.demo</groupId>" + separator + " <artifactId>demo</artifactId>"
+ separator + " <version>0.0.1-SNAPSHOT</version>" + separator
+ " <name>&lt;demo project&gt;</name>" + separator
+ " <description>A &quot;demo&quot; project for &apos;developers&apos; &amp; &apos;testers&apos;</description>"
+ separator + separator + "</project>" + separator);
});
}
private void generatePom(MavenBuild mavenBuild, Consumer<NodeAssert> consumer) {
MavenBuildWriter writer = new MavenBuildWriter();
StringWriter out = new StringWriter();
@@ -824,4 +845,11 @@ class MavenBuildWriterTests {
consumer.accept(new NodeAssert(out.toString()));
}
private void generatePomString(MavenBuild mavenBuild, Consumer<String> consumer) {
MavenBuildWriter writer = new MavenBuildWriter();
StringWriter out = new StringWriter();
writer.writeTo(new IndentingWriter(out), mavenBuild);
consumer.accept(out.toString());
}
}