package com.sunyard; import com.sunyard.proto.Util; /** * Created by Cheney on 2017/8/3. */ public class SydApiException extends RuntimeException{ private int retCode; private String msg; public int getRetCode() { return retCode; } private static String transMsg(int code){ String msg = "未定义的错误"; switch (code){ case -1: case -2: case -3: msg = "网络错误"; break; case -4: msg = "返回包的序列号有误"; break; case -5: msg = "返回包的命令码有误"; break; case -6: msg = "输出缓冲区预留太小"; break; case -25: msg = "输入的 HASH 值长度应该为 32 个字节"; break; case -26: msg = "用户标识超长(应该<=16) "; break; case -27: msg = "数据类型不合法 "; break; case 33: msg = "检索的数据或密钥不存在"; break; case 4: msg = "DER 编码格式错误(公钥) "; break; case 21: msg = "输入的数据格式错误 "; break; case 19: msg = "数据解密错(C3) "; break; case 2: msg = "签名验证错误 "; break; case 129: msg = "没有该指令"; break; case 0x8006 : { msg = "输入的数据格式错误"; break; } case 32770: msg = "签名验证错误(P7) "; break; case 32773: msg = "证书不可信"; break; case 32884: msg = "证书或签名数据的格式错"; break; case 36868: msg = "DN 所指向的实体不存在"; break; case 40000: msg = "输入的大数据处理异常"; break; case 56300: msg = "证书导入错误"; break; case 56307: msg = "证书删除错误"; break; case 0xC101 : msg = "证书识别异常"; break; default: msg = "未定义的错误"; } return msg; } public void transMsg(){ this.msg = transMsg( this.retCode ); } public SydApiException(int retCode) { super("SydApiException(" + "code = "+String.format("%04x", retCode) + ")" ); this.retCode = retCode; transMsg(); } public SydApiException(int retCode, Exception e) { super("SydApiException(" + "code = "+String.format("%04x", retCode) + ")" , e); this.retCode = retCode; transMsg(); } public SydApiException(String msg, int retCode){ super("SydApiException(" + String.format(" %04X", retCode) + ":" + ( null == msg ? transMsg(retCode) : msg ) + ")" ); this.retCode = retCode; if (null == msg || "".equals(msg)){ transMsg(); }else { this.msg = msg; } } public SydApiException(String msg, int ret, Throwable e) { super("SydApiException(code =" + String.format(" %04x", ret) + " : " + "msg =" + (msg == null ? "未定义的错误" : msg) + ")", e); this.retCode = ret; if (msg != null && !"".equals(msg)) { this.msg = msg; } else { this.transMsg(); } } public static SydApiException fromBin( byte[] b , String msg){ int code = null != b && b[0] >= 48 && b[0] <= 57 ? Util.a2i( b , 10) : Util.b2i( b ); return new SydApiException(msg, code); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(SydApiException.class.getName()); sb.append(" : "); sb.append("code = "); sb.append(this.retCode); sb.append(" ( 0x"); sb.append(Integer.toHexString(this.retCode)); sb.append(" ) "); sb.append(" msg = "); sb.append(msg); return sb.toString(); } }