maven-invoker-plugin
maven-invoker-plugin copied to clipboard
[MINVOKER-351] Escape special xml character in junit report
- use StringEscapeUtils.escapeXml10 form commons-text
https://issues.apache.org/jira/browse/MINVOKER-351
I don't understand this because it looks logically wrong. The model does not care how it is marshaled, shouldn't the XML writer do this?
@michael-o there is a problem with special chars ... they are not escaped / removed by the plexus-xml
@michael-o there is a problem with special chars ... they are not escaped / removed by the plexus-xml
Is there an upstream issue for this?
Read the JIRA issue. I assume we are talking about chars outside of https://en.wikipedia.org/wiki/Valid_characters_in_XML#XML_1.0?
...obviously it is: https://github.com/apache/commons-text/blob/46c7a93ed0b3e43c369d89d15495fb2bce0e693b/src/main/java/org/apache/commons/text/StringEscapeUtils.java#L232-L274
Exactly similar implementation should be in plexus-xml
https://github.com/codehaus-plexus/plexus-xml/blob/master/src/main/java/org/codehaus/plexus/util/xml/PrettyPrintXMLWriter.java#L205-L222
Looking into this. Can we make sure that we do not double escape the five protected chars.
when we will use MXSerializer we will have a exception ... so special characters should be somehow filtered
https://github.com/codehaus-plexus/plexus-xml/blob/master/src/main/java/org/codehaus/plexus/util/xml/pull/MXSerializer.java#L937-L958
Looking into this. Can we make sure that we do not double escape the five protected chars.
I used:
Xpp3DomWriter.write(new PrettyPrintXMLWriter(osw), testsuite, false);
so escaping is turned off in Xpp3DomWriter
@elharo Should an XML writer escape invalid chars to entities or fail here?
Looking into this. Can we make sure that we do not double escape the five protected chars.
I used:
Xpp3DomWriter.write(new PrettyPrintXMLWriter(osw), testsuite, false);so escaping is turned off in
Xpp3DomWriter
Maybe you should add a comment in the source code to depict this.
Am I stupid or where am I supposed to find the output of new Example().printAscii();? I can't find it.
Am I stupid or where am I supposed to find the output of
new Example().printAscii();? I can't find it.
There is:
public class Example {
public void printAscii() {
for (int i = 0; i < Byte.MAX_VALUE; ++i) {
System.out.println((char) i);
}
}
Standard output of test is pass to log file and next to report
Am I stupid or where am I supposed to find the output of
new Example().printAscii();? I can't find it.There is:
public class Example { public void printAscii() { for (int i = 0; i < Byte.MAX_VALUE; ++i) { System.out.println((char) i); } }Standard output of test is pass to log file and next to report
I know, but I don't see that stdout anywhere.
As we see root cause is in plexus-xml I know that using escapeXml10 is a workaround here.
So what is your proposition to solve issue in m-invoker-p?
@michael-o @elharo
As we see root cause is in plexus-xml I know that using escapeXml10 is a workaround here.
So what is your proposition to solve issue in m-invoker-p?
@michael-o @elharo
Regardless of the fix or the flaw in Plexus XML I completely fail to understand the supplied reprocuder in the JIRA issue.
As we see root cause is in plexus-xml I know that using escapeXml10 is a workaround here. So what is your proposition to solve issue in m-invoker-p? @michael-o @elharo
Regardless of the fix or the flaw in Plexus XML I completely fail to understand the supplied reprocuder in the JIRA issue.
Ok.
- we execute m-invoker-p for project
src/it/MINVOKER-351- m-invoker-p - execute a project
src/it/MINVOKER-351/src/it/minvoker-351- in
src/it/MINVOKER-351/src/it/minvoker-351we have a unit test which print some special chars to build output
- in
- m-invoker-p - collect output of
src/it/MINVOKER-351/src/it/minvoker-351and store in buildlog file - m-invoker-p - generate a junit report with
systemOutelement which contains body of buildlog file
- m-invoker-p - execute a project
- execute
site-pluginwithsurefire-reportto confirm that generated junit reports are ok
Moving to draft because the IT is poorly designed.
Moving to draft because the IT is poorly designed.
I hope you want to redesign proposed IT or you have any other hints how should be done.
Moving to draft because the IT is poorly designed.
I hope you want to redesign proposed IT or you have any other hints how should be done.
It is rather the conditions the IT comes into play. Please read my analysis on the JIRA issue.
@slawekjaranowski Just ran the changed IT with 3.8.8 and 3.9.6. In 3.8.8 I don't see output from 0x00 to 0x0F at all in build.log. Regardless of the escaping you applied. There is some inherent bug here which I prefer to understand first because applying this change.
@slawekjaranowski Please ping compiler and surefire plugin in the embedded IT, that's the reason why there is no output.
Please also prepend: https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getName%28int%29 Then we know what we print out.
@michael-o IT improved according to hints
@elharo is right. This is how it should look like:
public static void main(String[] args) throws ParserConfigurationException, TransformerException {
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = doc.createElement("root");
for (int i = 0; i < Byte.MAX_VALUE; i++) {
Element elem = doc.createElement("char");
elem.setTextContent(Character.getName(i) + ": " + ((char) i));
root.appendChild(elem);
}
doc.appendChild(root);
DOMSource domSource = new DOMSource(doc);
StreamResult result = new StreamResult(System.out);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
transformer.transform(domSource, result);
}
output:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
<char>NULL: �</char>
<char>START OF HEADING: </char>
<char>START OF TEXT: </char>
<char>END OF TEXT: </char>
<char>END OF TRANSMISSION: </char>
<char>ENQUIRY: </char>
<char>ACKNOWLEDGE: </char>
<char>BELL: </char>
<char>BACKSPACE: </char>
<char>CHARACTER TABULATION: </char>
<char>LINE FEED (LF):
</char>
<char>LINE TABULATION: </char>
<char>FORM FEED (FF): </char>
<char>CARRIAGE RETURN (CR): </char>
<char>SHIFT OUT: </char>
<char>SHIFT IN: </char>
<char>DATA LINK ESCAPE: </char>
<char>DEVICE CONTROL ONE: </char>
<char>DEVICE CONTROL TWO: </char>
<char>DEVICE CONTROL THREE: </char>
<char>DEVICE CONTROL FOUR: </char>
<char>NEGATIVE ACKNOWLEDGE: </char>
<char>SYNCHRONOUS IDLE: </char>
<char>END OF TRANSMISSION BLOCK: </char>
<char>CANCEL: </char>
<char>END OF MEDIUM: </char>
<char>SUBSTITUTE: </char>
<char>ESCAPE: </char>
<char>INFORMATION SEPARATOR FOUR: </char>
<char>INFORMATION SEPARATOR THREE: </char>
<char>INFORMATION SEPARATOR TWO: </char>
<char>INFORMATION SEPARATOR ONE: </char>
<char>SPACE: </char>
<char>EXCLAMATION MARK: !</char>
<char>QUOTATION MARK: "</char>
<char>NUMBER SIGN: #</char>
<char>DOLLAR SIGN: $</char>
<char>PERCENT SIGN: %</char>
<char>AMPERSAND: &</char>
<char>APOSTROPHE: '</char>
<char>LEFT PARENTHESIS: (</char>
<char>RIGHT PARENTHESIS: )</char>
<char>ASTERISK: *</char>
<char>PLUS SIGN: +</char>
<char>COMMA: ,</char>
<char>HYPHEN-MINUS: -</char>
<char>FULL STOP: .</char>
<char>SOLIDUS: /</char>
<char>DIGIT ZERO: 0</char>
<char>DIGIT ONE: 1</char>
<char>DIGIT TWO: 2</char>
<char>DIGIT THREE: 3</char>
<char>DIGIT FOUR: 4</char>
<char>DIGIT FIVE: 5</char>
<char>DIGIT SIX: 6</char>
<char>DIGIT SEVEN: 7</char>
<char>DIGIT EIGHT: 8</char>
<char>DIGIT NINE: 9</char>
<char>COLON: :</char>
<char>SEMICOLON: ;</char>
<char>LESS-THAN SIGN: <</char>
<char>EQUALS SIGN: =</char>
<char>GREATER-THAN SIGN: ></char>
<char>QUESTION MARK: ?</char>
<char>COMMERCIAL AT: @</char>
<char>LATIN CAPITAL LETTER A: A</char>
<char>LATIN CAPITAL LETTER B: B</char>
<char>LATIN CAPITAL LETTER C: C</char>
<char>LATIN CAPITAL LETTER D: D</char>
<char>LATIN CAPITAL LETTER E: E</char>
<char>LATIN CAPITAL LETTER F: F</char>
<char>LATIN CAPITAL LETTER G: G</char>
<char>LATIN CAPITAL LETTER H: H</char>
<char>LATIN CAPITAL LETTER I: I</char>
<char>LATIN CAPITAL LETTER J: J</char>
<char>LATIN CAPITAL LETTER K: K</char>
<char>LATIN CAPITAL LETTER L: L</char>
<char>LATIN CAPITAL LETTER M: M</char>
<char>LATIN CAPITAL LETTER N: N</char>
<char>LATIN CAPITAL LETTER O: O</char>
<char>LATIN CAPITAL LETTER P: P</char>
<char>LATIN CAPITAL LETTER Q: Q</char>
<char>LATIN CAPITAL LETTER R: R</char>
<char>LATIN CAPITAL LETTER S: S</char>
<char>LATIN CAPITAL LETTER T: T</char>
<char>LATIN CAPITAL LETTER U: U</char>
<char>LATIN CAPITAL LETTER V: V</char>
<char>LATIN CAPITAL LETTER W: W</char>
<char>LATIN CAPITAL LETTER X: X</char>
<char>LATIN CAPITAL LETTER Y: Y</char>
<char>LATIN CAPITAL LETTER Z: Z</char>
<char>LEFT SQUARE BRACKET: [</char>
<char>REVERSE SOLIDUS: \</char>
<char>RIGHT SQUARE BRACKET: ]</char>
<char>CIRCUMFLEX ACCENT: ^</char>
<char>LOW LINE: _</char>
<char>GRAVE ACCENT: `</char>
<char>LATIN SMALL LETTER A: a</char>
<char>LATIN SMALL LETTER B: b</char>
<char>LATIN SMALL LETTER C: c</char>
<char>LATIN SMALL LETTER D: d</char>
<char>LATIN SMALL LETTER E: e</char>
<char>LATIN SMALL LETTER F: f</char>
<char>LATIN SMALL LETTER G: g</char>
<char>LATIN SMALL LETTER H: h</char>
<char>LATIN SMALL LETTER I: i</char>
<char>LATIN SMALL LETTER J: j</char>
<char>LATIN SMALL LETTER K: k</char>
<char>LATIN SMALL LETTER L: l</char>
<char>LATIN SMALL LETTER M: m</char>
<char>LATIN SMALL LETTER N: n</char>
<char>LATIN SMALL LETTER O: o</char>
<char>LATIN SMALL LETTER P: p</char>
<char>LATIN SMALL LETTER Q: q</char>
<char>LATIN SMALL LETTER R: r</char>
<char>LATIN SMALL LETTER S: s</char>
<char>LATIN SMALL LETTER T: t</char>
<char>LATIN SMALL LETTER U: u</char>
<char>LATIN SMALL LETTER V: v</char>
<char>LATIN SMALL LETTER W: w</char>
<char>LATIN SMALL LETTER X: x</char>
<char>LATIN SMALL LETTER Y: y</char>
<char>LATIN SMALL LETTER Z: z</char>
<char>LEFT CURLY BRACKET: {</char>
<char>VERTICAL LINE: |</char>
<char>RIGHT CURLY BRACKET: }</char>
<char>TILDE: ~</char>
</root>
which it does not with the Plexus serializer. Means: Plexus serializer is broken.
Counterpart with Plexus:
MXSerializer sr = new MXSerializer();
sr.setOutput(System.out, "UTF-8");
sr.startDocument(null, Boolean.TRUE);
sr.startTag(null, "root");
for (int i = 0; i < Byte.MAX_VALUE; i++) {
sr.startTag(null, "char");
sr.text(Character.getName(i) + ": " + ((char) i));
sr.endTag(null, "char");
}
sr.endTag(null, "root");
sr.endDocument();
output:
Exception in thread "main" java.lang.IllegalStateException: character 0 is not allowed in output
at org.codehaus.plexus.util.xml.pull.MXSerializer.writeElementContent(MXSerializer.java:947)
at org.codehaus.plexus.util.xml.pull.MXSerializer.text(MXSerializer.java:780)
at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.main(DefaultSiteRenderer.java:955)
With StringEscapeUtils:
<?xml version="1.0" standalone="yes"?><root><char>NULL: </char><char>START OF HEADING: </char><char>START OF TEXT: </char><char>END OF TEXT: </char><char>END OF TRANSMISSION: </char><char>ENQUIRY: </char><char>ACKNOWLEDGE: </char><char>BELL: </char><char>BACKSPACE: </char><char>CHARACTER TABULATION: </char><char>LINE FEED (LF):
</char><char>LINE TABULATION: </char><char>FORM FEED (FF): </char><char>CARRIAGE RETURN (CR):
</char><char>SHIFT OUT: </char><char>SHIFT IN: </char><char>DATA LINK ESCAPE: </char><char>DEVICE CONTROL ONE: </char><char>DEVICE CONTROL TWO: </char><char>DEVICE CONTROL THREE: </char><char>DEVICE CONTROL FOUR: </char><char>NEGATIVE ACKNOWLEDGE: </char><char>SYNCHRONOUS IDLE: </char><char>END OF TRANSMISSION BLOCK: </char><char>CANCEL: </char><char>END OF MEDIUM: </char><char>SUBSTITUTE: </char><char>ESCAPE: </char><char>INFORMATION SEPARATOR FOUR: </char><char>INFORMATION SEPARATOR THREE: </char><char>INFORMATION SEPARATOR TWO: </char><char>INFORMATION SEPARATOR ONE: </char><char>SPACE: </char><char>EXCLAMATION MARK: !</char><char>QUOTATION MARK: &quot;</char><char>NUMBER SIGN: #</char><char>DOLLAR SIGN: $</char><char>PERCENT SIGN: %</char><char>AMPERSAND: &amp;</char><char>APOSTROPHE: &apos;</char><char>LEFT PARENTHESIS: (</char><char>RIGHT PARENTHESIS: )</char><char>ASTERISK: *</char><char>PLUS SIGN: +</char><char>COMMA: ,</char><char>HYPHEN-MINUS: -</char><char>FULL STOP: .</char><char>SOLIDUS: /</char><char>DIGIT ZERO: 0</char><char>DIGIT ONE: 1</char><char>DIGIT TWO: 2</char><char>DIGIT THREE: 3</char><char>DIGIT FOUR: 4</char><char>DIGIT FIVE: 5</char><char>DIGIT SIX: 6</char><char>DIGIT SEVEN: 7</char><char>DIGIT EIGHT: 8</char><char>DIGIT NINE: 9</char><char>COLON: :</char><char>SEMICOLON: ;</char><char>LESS-THAN SIGN: &lt;</char><char>EQUALS SIGN: =</char><char>GREATER-THAN SIGN: &gt;</char><char>QUESTION MARK: ?</char><char>COMMERCIAL AT: @</char><char>LATIN CAPITAL LETTER A: A</char><char>LATIN CAPITAL LETTER B: B</char><char>LATIN CAPITAL LETTER C: C</char><char>LATIN CAPITAL LETTER D: D</char><char>LATIN CAPITAL LETTER E: E</char><char>LATIN CAPITAL LETTER F: F</char><char>LATIN CAPITAL LETTER G: G</char><char>LATIN CAPITAL LETTER H: H</char><char>LATIN CAPITAL LETTER I: I</char><char>LATIN CAPITAL LETTER J: J</char><char>LATIN CAPITAL LETTER K: K</char><char>LATIN CAPITAL LETTER L: L</char><char>LATIN CAPITAL LETTER M: M</char><char>LATIN CAPITAL LETTER N: N</char><char>LATIN CAPITAL LETTER O: O</char><char>LATIN CAPITAL LETTER P: P</char><char>LATIN CAPITAL LETTER Q: Q</char><char>LATIN CAPITAL LETTER R: R</char><char>LATIN CAPITAL LETTER S: S</char><char>LATIN CAPITAL LETTER T: T</char><char>LATIN CAPITAL LETTER U: U</char><char>LATIN CAPITAL LETTER V: V</char><char>LATIN CAPITAL LETTER W: W</char><char>LATIN CAPITAL LETTER X: X</char><char>LATIN CAPITAL LETTER Y: Y</char><char>LATIN CAPITAL LETTER Z: Z</char><char>LEFT SQUARE BRACKET: [</char><char>REVERSE SOLIDUS: \</char><char>RIGHT SQUARE BRACKET: ]</char><char>CIRCUMFLEX ACCENT: ^</char><char>LOW LINE: _</char><char>GRAVE ACCENT: `</char><char>LATIN SMALL LETTER A: a</char><char>LATIN SMALL LETTER B: b</char><char>LATIN SMALL LETTER C: c</char><char>LATIN SMALL LETTER D: d</char><char>LATIN SMALL LETTER E: e</char><char>LATIN SMALL LETTER F: f</char><char>LATIN SMALL LETTER G: g</char><char>LATIN SMALL LETTER H: h</char><char>LATIN SMALL LETTER I: i</char><char>LATIN SMALL LETTER J: j</char><char>LATIN SMALL LETTER K: k</char><char>LATIN SMALL LETTER L: l</char><char>LATIN SMALL LETTER M: m</char><char>LATIN SMALL LETTER N: n</char><char>LATIN SMALL LETTER O: o</char><char>LATIN SMALL LETTER P: p</char><char>LATIN SMALL LETTER Q: q</char><char>LATIN SMALL LETTER R: r</char><char>LATIN SMALL LETTER S: s</char><char>LATIN SMALL LETTER T: t</char><char>LATIN SMALL LETTER U: u</char><char>LATIN SMALL LETTER V: v</char><char>LATIN SMALL LETTER W: w</char><char>LATIN SMALL LETTER X: x</char><char>LATIN SMALL LETTER Y: y</char><char>LATIN SMALL LETTER Z: z</char><char>LEFT CURLY BRACKET: {</char><char>VERTICAL LINE: |</char><char>RIGHT CURLY BRACKET: }</char><char>TILDE: ~</char></root>
I believe they are broken as well.
Naive upstream solution: https://github.com/codehaus-plexus/plexus-xml/pull/28
I have now tested the IT with the patched Plexus XML. Output looks fine now:
[INFO] Running example.minvoker351.ExampleTest
� - name: NULL
 - name: START OF HEADING
 - name: START OF TEXT
 - name: END OF TEXT
 - name: END OF TRANSMISSION
 - name: ENQUIRY
 - name: ACKNOWLEDGE
 - name: BELL
 - name: BACKSPACE
- name: CHARACTER TABULATION
- name: LINE FEED (LF)
 - name: LINE TABULATION
 - name: FORM FEED (FF)
- name: CARRIAGE RETURN (CR)
 - name: SHIFT OUT
 - name: SHIFT IN
 - name: DATA LINK ESCAPE
 - name: DEVICE CONTROL ONE
 - name: DEVICE CONTROL TWO
 - name: DEVICE CONTROL THREE
 - name: DEVICE CONTROL FOUR
 - name: NEGATIVE ACKNOWLEDGE
 - name: SYNCHRONOUS IDLE
 - name: END OF TRANSMISSION BLOCK
 - name: CANCEL
 - name: END OF MEDIUM
 - name: SUBSTITUTE
 - name: ESCAPE
 - name: INFORMATION SEPARATOR FOUR
 - name: INFORMATION SEPARATOR THREE
 - name: INFORMATION SEPARATOR TWO
 - name: INFORMATION SEPARATOR ONE
- name: SPACE
! - name: EXCLAMATION MARK
" - name: QUOTATION MARK
# - name: NUMBER SIGN
$ - name: DOLLAR SIGN
% - name: PERCENT SIGN
& - name: AMPERSAND
' - name: APOSTROPHE
( - name: LEFT PARENTHESIS
) - name: RIGHT PARENTHESIS
* - name: ASTERISK
+ - name: PLUS SIGN
, - name: COMMA
- - name: HYPHEN-MINUS
. - name: FULL STOP
/ - name: SOLIDUS
0 - name: DIGIT ZERO
1 - name: DIGIT ONE
2 - name: DIGIT TWO
3 - name: DIGIT THREE
4 - name: DIGIT FOUR
5 - name: DIGIT FIVE
6 - name: DIGIT SIX
7 - name: DIGIT SEVEN
8 - name: DIGIT EIGHT
9 - name: DIGIT NINE
: - name: COLON
; - name: SEMICOLON
< - name: LESS-THAN SIGN
= - name: EQUALS SIGN
> - name: GREATER-THAN SIGN
? - name: QUESTION MARK
@ - name: COMMERCIAL AT
A - name: LATIN CAPITAL LETTER A
B - name: LATIN CAPITAL LETTER B
C - name: LATIN CAPITAL LETTER C
D - name: LATIN CAPITAL LETTER D
E - name: LATIN CAPITAL LETTER E
F - name: LATIN CAPITAL LETTER F
G - name: LATIN CAPITAL LETTER G
H - name: LATIN CAPITAL LETTER H
I - name: LATIN CAPITAL LETTER I
J - name: LATIN CAPITAL LETTER J
K - name: LATIN CAPITAL LETTER K
L - name: LATIN CAPITAL LETTER L
M - name: LATIN CAPITAL LETTER M
N - name: LATIN CAPITAL LETTER N
O - name: LATIN CAPITAL LETTER O
P - name: LATIN CAPITAL LETTER P
Q - name: LATIN CAPITAL LETTER Q
R - name: LATIN CAPITAL LETTER R
S - name: LATIN CAPITAL LETTER S
T - name: LATIN CAPITAL LETTER T
U - name: LATIN CAPITAL LETTER U
V - name: LATIN CAPITAL LETTER V
W - name: LATIN CAPITAL LETTER W
X - name: LATIN CAPITAL LETTER X
Y - name: LATIN CAPITAL LETTER Y
Z - name: LATIN CAPITAL LETTER Z
[ - name: LEFT SQUARE BRACKET
\ - name: REVERSE SOLIDUS
] - name: RIGHT SQUARE BRACKET
^ - name: CIRCUMFLEX ACCENT
_ - name: LOW LINE
` - name: GRAVE ACCENT
a - name: LATIN SMALL LETTER A
b - name: LATIN SMALL LETTER B
c - name: LATIN SMALL LETTER C
d - name: LATIN SMALL LETTER D
e - name: LATIN SMALL LETTER E
f - name: LATIN SMALL LETTER F
g - name: LATIN SMALL LETTER G
h - name: LATIN SMALL LETTER H
i - name: LATIN SMALL LETTER I
j - name: LATIN SMALL LETTER J
k - name: LATIN SMALL LETTER K
l - name: LATIN SMALL LETTER L
m - name: LATIN SMALL LETTER M
n - name: LATIN SMALL LETTER N
o - name: LATIN SMALL LETTER O
p - name: LATIN SMALL LETTER P
q - name: LATIN SMALL LETTER Q
r - name: LATIN SMALL LETTER R
s - name: LATIN SMALL LETTER S
t - name: LATIN SMALL LETTER T
u - name: LATIN SMALL LETTER U
v - name: LATIN SMALL LETTER V
w - name: LATIN SMALL LETTER W
x - name: LATIN SMALL LETTER X
y - name: LATIN SMALL LETTER Y
z - name: LATIN SMALL LETTER Z
{ - name: LEFT CURLY BRACKET
| - name: VERTICAL LINE
} - name: RIGHT CURLY BRACKET
~ - name: TILDE
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.080 s -- in example.minvoker351.ExampleTest
but the reader chokes now:
Caused by: org.xml.sax.SAXParseException: Character reference "&#
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException (ErrorHandlerWrapper.java:204)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError (ErrorHandlerWrapper.java:178)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError (XMLErrorReporter.java:399)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError (XMLErrorReporter.java:326)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError (XMLScanner.java:1466)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanCharReferenceValue (XMLScanner.java:1339)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next (XMLDocumentFragmentScannerImpl.java:3052)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next (XMLDocumentScannerImpl.java:601)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument (XMLDocumentFragmentScannerImpl.java:504)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:841)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse (XML11Configuration.java:770)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse (XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse (AbstractSAXParser.java:1213)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse (SAXParserImpl.java:642)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse (SAXParserImpl.java:326)
at org.apache.maven.plugins.surefire.report.TestSuiteXmlParser.parse (TestSuiteXmlParser.java:91)
See: https://stackoverflow.com/questions/55335528/fatal-error-character-reference-org-xml-sax-saxparseexception
And the value is indeed correct:
Document doc2 = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(w.toString().getBytes(StandardCharsets.UTF_8)));
NodeList childNodes = doc2.getDocumentElement().getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
System.out.println(childNodes.item(i).getTextContent());
}
output: [Fatal Error] :3:19: Zeichenreferenz "&#
Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 3; columnNumber: 19; Zeichenreferenz "&#
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:338)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.main(DefaultSiteRenderer.java:954)
While I don't understand that those values are serialized, but cannot be deserialized the best would be to drop the serialization of them silently in Plexus XML.