in maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/report/StatelessXmlReporter.java [459:509]
private static void getTestProblems(
OutputStreamWriter outputStreamWriter,
XMLWriter ppw,
WrappedReportEntry report,
boolean trimStackTrace,
OutputStream fw,
String testErrorType,
boolean createNestedOutErrElements)
throws IOException {
ppw.startElement(testErrorType);
String stackTrace = report.getStackTrace(trimStackTrace);
if (report.getMessage() != null && !report.getMessage().isEmpty()) {
ppw.addAttribute("message", extraEscapeAttribute(report.getMessage()));
}
if (report.getStackTraceWriter() != null) {
//noinspection ThrowableResultOfMethodCallIgnored
SafeThrowable t = report.getStackTraceWriter().getThrowable();
if (t != null) {
if (t.getMessage() != null) {
int delimiter = stackTrace.indexOf(":");
String type = delimiter == -1 ? stackTrace : stackTrace.substring(0, delimiter);
ppw.addAttribute("type", type);
} else {
if (isNotBlank(stackTrace)) {
ppw.addAttribute("type", new StringTokenizer(stackTrace).nextToken());
}
}
}
}
/* This structure is inconsistent due to bad legacy design choices for the XML schema.
* Ideally, all elements would be complex and strackTrace would have its own element.
* See SUREFIRE-2230 for details to how improve and unify the schema in the future.
*/
if (createNestedOutErrElements) {
ppw.startElement("stackTrace");
if (stackTrace != null) {
extraEscapeElementValue(stackTrace, outputStreamWriter, ppw, fw);
}
ppw.endElement();
createOutErrElements(outputStreamWriter, ppw, report, fw);
} else if (stackTrace != null) {
extraEscapeElementValue(stackTrace, outputStreamWriter, ppw, fw);
}
ppw.endElement(); // entry type
}