import java.io.FileNotFoundException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.net.SocketTimeoutException;
import java.util.HashMap;
import java.util.Map;
public class ExceptionHandler
{
public interface ExceptionItem
{
Class<?> exceptionType();
void display();
}
public void handleException(Exception e)
{
ExceptionItem exceptItem = AbstractExceptionItem.wrapException(e);
displayExceptionInfo(exceptItem);
}
private final void displayExceptionInfo(ExceptionItem item)
{
item.display();
}
private abstract static class AbstractExceptionItem implements
ExceptionItem
{
private static Map<Class<? extends Exception>, Class<? extends ExceptionItem>> innerMap = new HashMap<Class<? extends Exception>, Class<? extends ExceptionItem>>();
static
{
innerMap.put(FileNotFoundException.class,
FileNotFoundExceptionItem.class);
innerMap.put(SocketTimeoutException.class,
SocketTimeoutExceptionItem.class);
}
protected Class<?> exceptionType;
protected Exception e;
protected AbstractExceptionItem(Exception e)
{
this.e = e;
this.exceptionType = e.getClass();
}
private static final ExceptionItem wrapException(final Exception except)
{
final Class<?> exceptionType = except.getClass();
Class<? extends ExceptionItem> cls = innerMap.get(exceptionType);
if (null == cls)
return null;
try
{
Constructor<? extends ExceptionItem> constructor = cls.getDeclaredConstructor(new Class<?>[] { Exception.class });
return constructor.newInstance(except);
}
catch (SecurityException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (NoSuchMethodException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (IllegalArgumentException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InstantiationException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvocationTargetException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
private static final class FileNotFoundExceptionItem extends
AbstractExceptionItem
{
FileNotFoundExceptionItem(Exception e)
{
super(e);
}
@Override
public Class<?> exceptionType()
{
return exceptionType;
}
@Override
public void display()
{
System.out.printf("The file [%s] is not found!", e.getMessage());
}
}
private static final class SocketTimeoutExceptionItem extends
AbstractExceptionItem
{
SocketTimeoutExceptionItem(Exception e)
{
super(e);
}
@Override
public Class<?> exceptionType()
{
return exceptionType;
}
@Override
public void display()
{
System.out.printf("The socket connect timed out, detail message is:[%s]",
e.getMessage());
}
}
/**
* @param args
*/
public static void main(String[] args)
{
ExceptionHandler instance = new ExceptionHandler();
instance.handleException(new SocketTimeoutException("connection refused to 10.60.7.69"));
}
}
分享到:
相关推荐
消息分发器 、JAVA、消息处理框架
关于JAVA中事件分发和监听机制实现的代码实例,绝对实用代码,有说明。
实现java反射和分发的原理,给需要使用的人下载
消息分发框架,基于java阻塞队列实现,生产者消费者模型 可用于任务分发,服务器消息消息,以及网络IO 性能优化,多线程
在java web开发中,当前流行开发框架都是基于MVC架构的,其中分发器充当着中流砥柱的作用,它负责拦截所有...本文是一种动态分发器的简易实现,通过java反射机制,将截获的请求的URL解析后,动态调用指定的处理类和方法
java实现流量控制java实现流量控制java实现流量控制java实现流量控制java实现流量控制
mule 根据JAVA 代码实现路由分发。
java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计——java文件传输系统的设计与实现(论文+源代码).zip java毕业设计...
一个测试版的群集分发器,目前只支持HTTP协议的转发。 测试有任何问题,请联系本人zxjemail@sina.com
利用django自带的routers实现对url路由的分发,可以减少对url路由表的定义,并且可以实现代码的解耦,极大的节省了开发的时间。
自己写的android事件分发、拦截、处理的代码,可以清楚知道事件分发、拦截和处理的过程。
打包分发源码_ 还没泛滥的一款打包免签分发平台+搭建说明 搭建需要一点技术-Java 的有点麻烦-不过暂时还没泛滥,含简单说明,自行研究
打包分发源码_ 还没泛滥的一款打包免签分发平台+搭建说明 搭建需要一点技术-Java 的有点麻烦-不过暂时还没泛滥,含简单说明,自行研究,不提供技术服务。
宏昌家族二级分发域名系统是一个基于thinkphp3.2.2框架和DNSPod的API完成的一个程序,这个程序可以使你的顶级域名的二级域名分发给其他用户,顶级域名价值得到充分的利用 宏昌家族二级分发域名系统使用方法: 1.把...
ViewPager事件分发及嵌套冲突处理
自己写的android事件分发拦截处理的代码可以清楚知道事件分发拦截和处理的过程.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
适用于日常办公中对数据处理分发,例如本程序背景为分发各区县考核数据。
全新2022二级域名分发系统PHP源码_附安装教程
利用组策略分发WIN2003软件包。组织单元的建立(在服务器上实现)、权力的委派 、委派权力的验证