X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fintegration%2FCmsExceptionsChain.java;fp=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fintegration%2FCmsExceptionsChain.java;h=d7a51b74a96f6770bdf8b82620aa3d2fee73f90e;hb=cd49755b0b4d287d7bc3bb91e1eb6cb3dc70c561;hp=0000000000000000000000000000000000000000;hpb=74787102ae9a8533927cee62238d7e78a22dff63;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 new file mode 100644 index 000000000..d7a51b74a --- /dev/null +++ b/org.argeo.cms/src/org/argeo/cms/integration/CmsExceptionsChain.java @@ -0,0 +1,74 @@ +package org.argeo.cms.integration; + +import java.io.IOException; +import java.io.Writer; + +import javax.servlet.http.HttpServletResponse; + +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 CmsExceptionsChain() { + super(); + } + + public CmsExceptionsChain(Throwable exception) { + super(exception); + } + + public String toJsonString(ObjectMapper objectMapper) { + try { + return objectMapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + throw new IllegalStateException("Cannot write system exceptions " + toString(), e); + } + } + + public void writeAsJson(ObjectMapper objectMapper, Writer writer) { + try { + JsonGenerator jg = objectMapper.getFactory().createGenerator(writer); + jg.writeObject(this); + } catch (IOException e) { + throw new IllegalStateException("Cannot write system exceptions " + toString(), e); + } + } + + public void writeAsJson(ObjectMapper objectMapper, HttpServletResponse resp) { + try { + resp.setContentType("application/json"); + resp.setStatus(500); + writeAsJson(objectMapper, resp.getWriter()); + } catch (IOException e) { + throw new IllegalStateException("Cannot write system exceptions " + toString(), e); + } + } + + public static void main(String[] args) throws Exception { + try { + try { + try { + testDeeper(); + } catch (Exception e) { + throw new Exception("Less deep exception", e); + } + } catch (Exception e) { + throw new RuntimeException("Top exception", e); + } + } catch (Exception e) { + CmsExceptionsChain vjeSystemErrors = new CmsExceptionsChain(e); + ObjectMapper objectMapper = new ObjectMapper(); + System.out.println(objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(vjeSystemErrors)); + e.printStackTrace(); + } + } + + static void testDeeper() throws Exception { + throw new IllegalStateException("Deep exception"); + } + +}