X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Futil%2FExceptionsChain.java;fp=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Futil%2FExceptionsChain.java;h=773a1b733c7cfbb04a7726cf68d5961d502182af;hb=cd49755b0b4d287d7bc3bb91e1eb6cb3dc70c561;hp=0000000000000000000000000000000000000000;hpb=74787102ae9a8533927cee62238d7e78a22dff63;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/util/ExceptionsChain.java b/org.argeo.util/src/org/argeo/util/ExceptionsChain.java new file mode 100644 index 000000000..773a1b733 --- /dev/null +++ b/org.argeo.util/src/org/argeo/util/ExceptionsChain.java @@ -0,0 +1,87 @@ +package org.argeo.util; + +import java.util.ArrayList; +import java.util.List; + +/** Serialisable wrapper of a {@link Throwable}. */ +public class ExceptionsChain { + private List exceptions = new ArrayList<>(); + + public ExceptionsChain() { + } + + public ExceptionsChain(Throwable exception) { + writeException(exception); + } + + /** recursive */ + protected void writeException(Throwable exception) { + SystemException systemException = new SystemException(exception); + exceptions.add(systemException); + Throwable cause = exception.getCause(); + if (cause != null) + writeException(cause); + } + + public List getExceptions() { + return exceptions; + } + + public void setExceptions(List exceptions) { + this.exceptions = exceptions; + } + + /** An exception in the chain. */ + public static class SystemException { + private String type; + private String message; + private List stackTrace; + + public SystemException() { + } + + public SystemException(Throwable exception) { + this.type = exception.getClass().getName(); + this.message = exception.getMessage(); + this.stackTrace = new ArrayList<>(); + StackTraceElement[] elems = exception.getStackTrace(); + for (int i = 0; i < elems.length; i++) + stackTrace.add("at " + elems[i].toString()); + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getStackTrace() { + return stackTrace; + } + + public void setStackTrace(List stackTrace) { + this.stackTrace = stackTrace; + } + + @Override + public String toString() { + return "System exception: " + type + ", " + message + ", " + stackTrace; + } + + } + + @Override + public String toString() { + return exceptions.toString(); + } +}