150 lines
4.0 KiB
Java
150 lines
4.0 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 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();
|
|
}
|
|
}
|