package com.test;
import java.io.FileNotFoundException;
import java.net.ConnectException;
import java.net.NoRouteToHostException;
import java.net.SocketTimeoutException;
import com.acrm.client.exception.CannotConnectException;
import com.acrm.client.exception.InteractionException;
import com.acrm.client.exception.ServerThrowException;
public class CRMUtils {
/**
* 得到最底层引起该异常的异常
* @param t
* @return
*/
public static Throwable getCaused(Throwable t){
Throwable th1=null,th2=t;
while(th2!=null && (th1=th2.getCause())!=null){
th2=th1.getCause();
}
return th1==null?th2:th1;
}
public static Throwable getCausedUntil(Throwable t,Class<? extends Exception> clss){
Throwable th1=null,th2=t;
while(th2!=null && ((th1=th2.getCause())!=null) || clss.isInstance(th2)){
th2=th1.getCause();
}
return th1==null?th2:th1;
}
public static InteractionException parseException(Throwable t){
//t.printStackTrace();
t=CRMUtils.getCaused(t);
if(t instanceof ServerThrowException){
return (InteractionException) t;
}if(t instanceof ConnectException){
return new CannotConnectException("Connect refused", 2);//连接被拒绝
}else if(t instanceof SocketTimeoutException){//connect timed out 21 Read timed out 14
return new CannotConnectException("Connect timed out",t, 1);//连接超时//网络不畅通
}else if(t instanceof NoRouteToHostException){
return new CannotConnectException("No routeto host", 0);//没有到主机的路由
}else if(t instanceof SocketTimeoutException){
return new CannotConnectException("Read timed out", 1);//读取数据超时
}else if(t instanceof FileNotFoundException){
return new ServerThrowException("Cannot connect to Server",t, 0);//连接失败,导致此异常极有可能服务端异常405
}else{
return new CannotConnectException("连接失败", t,0);
}
}
}