X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fintegration%2FCmsExceptionsChain.java;h=bbac176a5fd7c916b8ea686e5c06b342197ce0f4;hb=15e4462e165655e355a8286a70dae562a120bc1d;hp=12ac96da2ead656d14388a9bd8a5feb8a427d691;hpb=a940a66aca249a1ce7dea66d43b0e2816845d7d1;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/integration/CmsExceptionsChain.java b/org.argeo.cms/src/org/argeo/cms/integration/CmsExceptionsChain.java index 12ac96da2..bbac176a5 100644 --- a/org.argeo.cms/src/org/argeo/cms/integration/CmsExceptionsChain.java +++ b/org.argeo.cms/src/org/argeo/cms/integration/CmsExceptionsChain.java @@ -2,27 +2,30 @@ package org.argeo.cms.integration; import java.io.IOException; import java.io.Writer; +import java.util.ArrayList; +import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.util.ExceptionsChain; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; /** Serialisable wrapper of a {@link Throwable}. */ -public class CmsExceptionsChain extends ExceptionsChain { +public class CmsExceptionsChain { public final static Log log = LogFactory.getLog(CmsExceptionsChain.class); + private List exceptions = new ArrayList<>(); + public CmsExceptionsChain() { super(); } public CmsExceptionsChain(Throwable exception) { - super(exception); + writeException(exception); if (log.isDebugEnabled()) log.error("Exception chain", exception); } @@ -54,6 +57,77 @@ public class CmsExceptionsChain extends ExceptionsChain { } } + /** 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(); + } + // public static void main(String[] args) throws Exception { // try { // try {