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 029/** Jackson serializer that renders a {@link Throwable} as {@code {message, stacktrace}}. */ 030public class ThrowableSerializer extends JsonSerializer<Throwable> { 031 /** Default constructor used by Jackson registration. */ 032 public ThrowableSerializer() {} 033 @Override 034 public void serialize(Throwable t, JsonGenerator gen, SerializerProvider serializers) throws IOException { 035 gen.writeStartObject(); 036 gen.writeStringField("message", t.getMessage()); 037 gen.writeStringField("stacktrace", toString(t)); 038 gen.writeEndObject(); 039 } 040 041 private String toString (Throwable t) { 042 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 043 PrintStream ps = new PrintStream(baos); 044 t.printStackTrace(ps); 045 return baos.toString(); 046 } 047}