private static void getTestProblems()

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
    }