package com.java110.utils.exception; import com.alibaba.fastjson.JSONObject; import com.java110.utils.constant.ResponseConstant; import java.io.PrintStream; import java.io.PrintWriter; /** * 侦听执行异常 * Created by wuxw on 2018/4/14. */ public class CmdException extends RuntimeException { private Result result; private Throwable cause = this; public CmdException() { } /** * 构造方法 * * @param result 返回值 * @param cause 异常堆栈 */ public CmdException(Result result, Throwable cause) { super(result.getMsg(), cause); this.result = result; } /** * 构造方法 * * @param msg 错误消息 */ public CmdException(String msg) { super(msg); this.result = new Result(ResponseConstant.RESULT_CODE_ERROR, msg); } /** * 构造方法 * * @param code 返回码 * @param msg 错误消息 */ public CmdException(int code, String msg) { super(msg); this.result = new Result(code, msg); } public CmdException(String code, String msg) { super(msg); this.result = new Result(code, msg); } /** * 构造方法 * * @param result 返回值 * @param detail 具体的返回消息 */ public CmdException(Result result, String detail) { super(result.getMsg() + "," + detail); this.result = new Result(result.getCode(), result.getMsg() + "," + detail); } /** * 构造方法 * * @param result 返回值 * @param detail 具体的返回消息 * @param cause 异常堆栈 */ public CmdException(Result result, String detail, Throwable cause) { super(result.getMsg() + "," + detail, cause); this.result = new Result(result.getCode(), result.getMsg() + "," + detail); } /** * 构造方法 * * @param code 返回码 * @param msg 返回消息 * @param cause 异常堆栈 */ public CmdException(int code, String msg, Throwable cause) { super(msg, cause); if (cause != null) { if (cause.getCause() != null) { msg += " cause:" + ExceptionUtils.populateExecption(cause.getCause(), 500); } msg += " StackTrace:" + ExceptionUtils.populateExecption(cause, 500); } this.result = new Result(code, msg); } /** * 构造方法 * * @param code 返回码 * @param cause 异常堆栈 */ public CmdException(int code, Throwable cause) { super(cause); String msg = ""; if (cause != null) { if (cause.getCause() != null) { msg += " cause:" + ExceptionUtils.populateExecption(cause.getCause(), 500); } msg += " StackTrace:" + ExceptionUtils.populateExecption(cause, 500); } this.result = new Result(code, msg); } /** * TODO 简单描述该方法的实现功能(可选). * * @see Throwable#getCause() */ public synchronized Throwable getCause() { return (cause == this ? super.getCause() : cause); } /** * 返回异常消息 * * @return 异常消息 */ @Override public String getMessage() { return ExceptionUtils.buildMessage(super.getMessage(), getCause()); } /** * 异常 * * @return */ public String toJsonString() { JSONObject exceptionJson = JSONObject.parseObject("{\"exception\":{}"); JSONObject exceptionJsonObj = exceptionJson.getJSONObject("exception"); if (getResult() != null) exceptionJsonObj.putAll(JSONObject.parseObject(result.toString())); exceptionJsonObj.put("exceptionTrace", getMessage()); return exceptionJsonObj.toString(); } @Override public void printStackTrace(PrintStream ps) { ps.print(""); if (getResult() != null) { ps.print(result.toString()); } ps.append(""); Throwable cause = getCause(); if (cause == null) { super.printStackTrace(ps); } else { ps.println(this); ps.print("Caused by: "); cause.printStackTrace(ps); } ps.append(""); ps.println(""); } @Override public void printStackTrace(PrintWriter pw) { pw.print(""); if (getResult() != null) { pw.print(result.toString()); } pw.append(""); Throwable cause = getCause(); if (cause == null) { super.printStackTrace(pw); } else { pw.println(this); pw.print("Caused by: "); cause.printStackTrace(pw); } pw.append(""); pw.println(""); } /** * 返回异常值 * * @return 异常值对象 */ public Result getResult() { return result; } public void setResult(Result result) { this.result = result; } }