diff --git a/CHANGELOG.md b/CHANGELOG.md
index 167f8a9..7b2d9be 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
+### Added
+- Include value from Exception.stacktrace if available ([#30](https://github.com/cucumber/cucumber-junit-xml-formatter/pull/30), M.P. Korstanje)
+
### Fixed
- Do not overwrite results of retried tests ([#29](https://github.com/cucumber/cucumber-junit-xml-formatter/pull/29), M.P. Korstanje)
diff --git a/java/pom.xml b/java/pom.xml
index 3a65c1f..7c3f628 100644
--- a/java/pom.xml
+++ b/java/pom.xml
@@ -51,7 +51,7 @@
io.cucumber
messages
- [21.0.1,25.0.0)
+ [24.0.0,25.0.0)
diff --git a/java/src/main/java/io/cucumber/junitxmlformatter/XmlReportWriter.java b/java/src/main/java/io/cucumber/junitxmlformatter/XmlReportWriter.java
index 9f7de61..ae3db98 100644
--- a/java/src/main/java/io/cucumber/junitxmlformatter/XmlReportWriter.java
+++ b/java/src/main/java/io/cucumber/junitxmlformatter/XmlReportWriter.java
@@ -100,8 +100,10 @@ private void writeNonPassedElement(EscapingXmlStreamWriter writer, TestCaseStart
Optional message = result.getMessage();
Optional exceptionType = result.getException().map(Exception::getType);
Optional exceptionMessage = result.getException().flatMap(Exception::getMessage);
+ Optional exceptionStackTrace = result.getException().flatMap(Exception::getStackTrace);
- if (message.isPresent()) {
+ boolean hasMessageOrStackTrace = message.isPresent() || exceptionStackTrace.isPresent();
+ if (hasMessageOrStackTrace) {
writer.writeStartElement(elementName);
} else {
writer.writeEmptyElement(elementName);
@@ -113,13 +115,21 @@ private void writeNonPassedElement(EscapingXmlStreamWriter writer, TestCaseStart
if (exceptionMessage.isPresent()) {
writer.writeAttribute("message", exceptionMessage.get());
}
- if (message.isPresent()) {
- writer.newLine();
- writer.writeCData(message.get());
- writer.newLine();
+ if (hasMessageOrStackTrace) {
+ if (exceptionStackTrace.isPresent()) {
+ writer.newLine();
+ writer.writeCData(exceptionStackTrace.get());
+ writer.newLine();
+ } else {
+ // Fall back to message for older implementations
+ // that put the stack trace in the message
+ writer.newLine();
+ writer.writeCData(message.get());
+ writer.newLine();
+ }
}
- if (message.isPresent()) {
+ if (hasMessageOrStackTrace) {
writer.writeEndElement();
}
writer.newLine();