001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.log.render; 020 021import com.fasterxml.jackson.core.JsonGenerator; 022import com.fasterxml.jackson.databind.JsonSerializer; 023import com.fasterxml.jackson.databind.SerializerProvider; 024 025import java.io.ByteArrayOutputStream; 026import java.io.IOException; 027import java.io.PrintStream; 028 029public class ThrowableSerializer extends JsonSerializer<Throwable> { 030 @Override 031 public void serialize(Throwable t, JsonGenerator gen, SerializerProvider serializers) throws IOException { 032 gen.writeStartObject(); 033 gen.writeStringField("message", t.getMessage()); 034 gen.writeStringField("stacktrace", toString(t)); 035 gen.writeEndObject(); 036 } 037 038 private String toString (Throwable t) { 039 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 040 PrintStream ps = new PrintStream(baos); 041 t.printStackTrace(ps); 042 return baos.toString(); 043 } 044}