I tried to use jtreg -xml:verify recently but I found that a number of
jdk tests emit control characters in their output which results in
illegal characters in the XML output.
I worked around it with the attached patch (which just drops the control
characters except for 0x9, 0xA and 0xD). I bring it out as it may be
something to look into more as there are other restricted characters and
maybe they should be mapped to something rather than dropped.
-Alan
diff --git a/src/share/classes/com/sun/javatest/regtest/XMLWriter.java
b/src/share/classes/com/sun/javatest/regtest/XMLWriter.java
--- a/src/share/classes/com/sun/javatest/regtest/XMLWriter.java
+++ b/src/share/classes/com/sun/javatest/regtest/XMLWriter.java
@@ -417,6 +417,7 @@
private static final Pattern XML_AMP = Pattern.compile("&");
private static final Pattern XML_QUOTE = Pattern.compile("\"");
private static final Pattern XML_APOS = Pattern.compile("\'");
+ private static final Pattern XML_ILLEGAL =
Pattern.compile("[\\p{Cntrl}&&[^\\u0009\\u000A\\u000D]]");
// sanitize the string for xml presentation
public void sanitize(String in) {
@@ -429,6 +430,7 @@
in = XML_LT.matcher(in).replaceAll("<");
in = XML_QUOTE.matcher(in).replaceAll(""");
in = XML_APOS.matcher(in).replaceAll("'");
+ in = XML_ILLEGAL.matcher(in).replaceAll("");
ps.print(in);
}
}
jdk tests emit control characters in their output which results in
illegal characters in the XML output.
I worked around it with the attached patch (which just drops the control
characters except for 0x9, 0xA and 0xD). I bring it out as it may be
something to look into more as there are other restricted characters and
maybe they should be mapped to something rather than dropped.
-Alan
diff --git a/src/share/classes/com/sun/javatest/regtest/XMLWriter.java
b/src/share/classes/com/sun/javatest/regtest/XMLWriter.java
--- a/src/share/classes/com/sun/javatest/regtest/XMLWriter.java
+++ b/src/share/classes/com/sun/javatest/regtest/XMLWriter.java
@@ -417,6 +417,7 @@
private static final Pattern XML_AMP = Pattern.compile("&");
private static final Pattern XML_QUOTE = Pattern.compile("\"");
private static final Pattern XML_APOS = Pattern.compile("\'");
+ private static final Pattern XML_ILLEGAL =
Pattern.compile("[\\p{Cntrl}&&[^\\u0009\\u000A\\u000D]]");
// sanitize the string for xml presentation
public void sanitize(String in) {
@@ -429,6 +430,7 @@
in = XML_LT.matcher(in).replaceAll("<");
in = XML_QUOTE.matcher(in).replaceAll(""");
in = XML_APOS.matcher(in).replaceAll("'");
+ in = XML_ILLEGAL.matcher(in).replaceAll("");
ps.print(in);
}
}