package knorxx.framework.generator.web.server.rpc; import com.google.common.base.Strings; import java.io.PrintWriter; import java.io.StringWriter; import knorxx.framework.generator.web.server.json.JsonHelper; /** * * @author sj */ public class VerboseExceptionMarshaller extends ExceptionMarshaller { public final static String MESSAGE_PROPERTY = "message"; public final static String STACK_TRACE_PROPERTY = "stackTrace"; public final static String NAME_PROPERTY = "name"; public final static String LINE_NUMER_PROPERTY = "lineNumber"; @Override public String marshall(Throwable throwable, JsonHelper jsonHelper) { return jsonHelper.toJson(new MarshalledException(throwable)); } private final static class MarshalledException { private final String message; private final String stackTrace; private final String name; private final int lineNumber; private MarshalledException(Throwable throwable) { this.message = throwable.getClass().getName() + (Strings.isNullOrEmpty(throwable.getMessage()) ? "" : (": " + throwable.getMessage())); StringWriter stackTraceWriter = new StringWriter(); PrintWriter stackTracePrintWriter = new PrintWriter(stackTraceWriter); throwable.printStackTrace(stackTracePrintWriter); this.stackTrace = stackTraceWriter.toString(); this.name = throwable.getStackTrace()[0].getClassName(); this.lineNumber = throwable.getStackTrace()[0].getLineNumber(); } public String getMessage() { return message; } public String getStackTrace() { return stackTrace; } public String getName() { return name; } public int getLineNumber() { return lineNumber; } } }