You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/12/15 17:36:30 UTC
[isis] 04/04: ISIS-1796: extends the error details
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 5fd91143d1e69bdb772742e27de3e130815552ad
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Dec 15 17:33:32 2017 +0000
ISIS-1796: extends the error details
---
.../isis/applib/services/error/ErrorDetails.java | 25 +++++++++++++++----
.../viewer/wicket/ui/errors/ExceptionModel.java | 28 ++++++++++++++++++----
.../viewer/wicket/ui/pages/error/ErrorPage.java | 24 +++++++++++++------
3 files changed, 61 insertions(+), 16 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/error/ErrorDetails.java b/core/applib/src/main/java/org/apache/isis/applib/services/error/ErrorDetails.java
index 2ce4211..9acfcc3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/error/ErrorDetails.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/error/ErrorDetails.java
@@ -33,17 +33,20 @@ public class ErrorDetails {
private final String mainMessage;
private final boolean recognized;
private final boolean authorizationCause;
- private final List<String> stackTraceDetailList;
+ private final List<String> stackTraceDetailListCombined;
+ private final List<List<String>> stackDetailListPerCause;
public ErrorDetails(
final String mainMessage,
final boolean recognized,
final boolean authorizationCause,
- final List<String> stackTraceDetailList) {
+ final List<String> stackTraceDetailListCombined,
+ final List<List<String>> stackDetailListPerCause) {
this.mainMessage = mainMessage;
this.recognized = recognized;
this.authorizationCause = authorizationCause;
- this.stackTraceDetailList = stackTraceDetailList;
+ this.stackTraceDetailListCombined = stackTraceDetailListCombined;
+ this.stackDetailListPerCause = stackDetailListPerCause;
}
public String getMainMessage() {
@@ -58,8 +61,22 @@ public class ErrorDetails {
return authorizationCause;
}
+ /**
+ * @deprecated - renamed to {@link #getStackTraceDetailCombined()}.
+ */
+ @Deprecated
public List<String> getStackTraceDetailList() {
- return stackTraceDetailList;
+ return stackTraceDetailListCombined;
}
+ public List<String> getStackTraceDetailCombined() {
+ return stackTraceDetailListCombined;
+ }
+
+ /**
+ * One per exception cause.
+ */
+ public List<List<String>> getStackTraceDetailPerCause() {
+ return stackDetailListPerCause;
+ }
}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionModel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionModel.java
index e4e620f..3e14faa 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionModel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionModel.java
@@ -38,6 +38,7 @@ public class ExceptionModel extends ModelAbstract<List<StackTraceDetail>> {
private static final String MAIN_MESSAGE_IF_NOT_RECOGNIZED = "Sorry, an unexpected error occurred.";
private List<StackTraceDetail> stackTraceDetailList;
+ private List<List<StackTraceDetail>> stackTraceDetailLists;
private boolean recognized;
private boolean authorizationCause;
@@ -75,6 +76,7 @@ public class ExceptionModel extends ModelAbstract<List<StackTraceDetail>> {
}
}
stackTraceDetailList = asStackTrace(ex);
+ stackTraceDetailLists = asStackTraces(ex);
}
@@ -135,6 +137,9 @@ public class ExceptionModel extends ModelAbstract<List<StackTraceDetail>> {
public List<StackTraceDetail> getStackTrace() {
return stackTraceDetailList;
}
+ public List<List<StackTraceDetail>> getStackTraces() {
+ return stackTraceDetailLists;
+ }
private static List<StackTraceDetail> asStackTrace(Throwable ex) {
List<StackTraceDetail> stackTrace = Lists.newArrayList();
@@ -148,15 +153,28 @@ public class ExceptionModel extends ModelAbstract<List<StackTraceDetail>> {
} else {
firstTime = false;
}
- stackTrace.add(StackTraceDetail.exceptionClassName(cause));
- stackTrace.add(StackTraceDetail.exceptionMessage(cause));
- addStackTraceElements(cause, stackTrace);
+ append(cause, stackTrace);
}
return stackTrace;
}
- private static void addStackTraceElements(Throwable ex, List<StackTraceDetail> stackTrace) {
- for (StackTraceElement el : ex.getStackTrace()) {
+ private static List<List<StackTraceDetail>> asStackTraces(Throwable ex) {
+ List<List<StackTraceDetail>> stackTraces = Lists.newArrayList();
+
+ List<Throwable> causalChain = Throwables.getCausalChain(ex);
+ boolean firstTime = true;
+ for(Throwable cause: causalChain) {
+ List<StackTraceDetail> stackTrace = Lists.newArrayList();
+ append(cause, stackTrace);
+ stackTraces.add(stackTrace);
+ }
+ return stackTraces;
+ }
+
+ private static void append(final Throwable cause, final List<StackTraceDetail> stackTrace) {
+ stackTrace.add(StackTraceDetail.exceptionClassName(cause));
+ stackTrace.add(StackTraceDetail.exceptionMessage(cause));
+ for (StackTraceElement el : cause.getStackTrace()) {
stackTrace.add(StackTraceDetail.element(el));
}
}
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/error/ErrorPage.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/error/ErrorPage.java
index 6824c8b..e5c2973 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/error/ErrorPage.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/error/ErrorPage.java
@@ -62,14 +62,16 @@ public class ErrorPage extends PageAbstract {
final boolean authorizationException = exceptionModel.isAuthorizationException();
final List<StackTraceDetail> stackTrace = exceptionModel.getStackTrace();
- final List<String> stackDetails = Lists.transform(stackTrace, new Function<StackTraceDetail, String>() {
- @Nullable @Override public String apply(final StackTraceDetail stackTraceDetail) {
- return stackTraceDetail.getLine();
- }
- });
+ final List<String> stackDetailList = transform(stackTrace);
- final ErrorDetails errorDetails = new ErrorDetails(mainMessage, recognized, authorizationException,
- stackDetails);
+ final List<List<StackTraceDetail>> stackTraces = exceptionModel.getStackTraces();
+ final List<List<String>> stackDetailLists = Lists.newArrayList();
+ for (List<StackTraceDetail> trace : stackTraces) {
+ stackDetailLists.add(transform(trace));
+ }
+
+ final ErrorDetails errorDetails =
+ new ErrorDetails(mainMessage, recognized, authorizationException, stackDetailList, stackDetailLists);
final Ticket ticket = errorReportingService.reportError(errorDetails);
@@ -83,4 +85,12 @@ public class ErrorPage extends PageAbstract {
}
+ protected List<String> transform(final List<StackTraceDetail> stackTrace) {
+ return Lists.transform(stackTrace, new Function<StackTraceDetail, String>() {
+ @Nullable @Override public String apply(final StackTraceDetail stackTraceDetail) {
+ return stackTraceDetail.getLine();
+ }
+ });
+ }
+
}
--
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.