sydapi/src/main/java/com/sunyard/SydApiException.java
2022-12-15 17:38:09 +08:00

161 lines
4.4 KiB
Java

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();
}
}