异常信息1

来源:互联网 发布:mactalk 人生元编程 编辑:程序博客网 时间:2024/06/02 07:57

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;

import sssssss.Debug;

/**
 * 类 编 号:M00_EccInfoException
 * 类 名 称:EccInfoException
 * 内容摘要:业务异常类的基类,继承Exception异常类
 * 完成日期:
 * 作    者: 
 */
public class EccInfoException extends Exception
{

 /**
  * ECC异常值对象类
  */
 private EccExceptionInfoBO eccExceptionInfoBO = new EccExceptionInfoBO();

 /**
  * 方法编号:04
  * 方法名称:EccInfoException
  * 内容摘要:构造方法,含有异常信息和可抛出类型的入参,调用父类相同的构造方法
  *
  * @param exceptionMessage
  * @param throwable
  * @roseuid 431EAAD003AD
  */
 public EccInfoException(String exceptionMessage, Throwable throwable)
 {
  super(exceptionMessage);
 }

 /**
  * 方法编号:03
  * 方法名称:EccInfoException
  * 内容摘要:构造方法,含有可抛出类型的入参,调用父类相同的构造方法
  *
  * @param throwable
  * @roseuid 431EAA92039F
  */
 public EccInfoException(Throwable throwable)
 {
  super();

 }

 /**
  * 方法编号:02
  * 方法名称:EccInfoException
  * 内容摘要:构造方法,含有异常信息的入参,调用父类相同的构造方法
  *
  * @param exceptionMessage
  * @roseuid 431EA3E0039C
  */
 public EccInfoException(String exceptionMessage)
 {
  super(exceptionMessage);

 }

 /**
  * 方法编号:01
  * 方法名称:EccInfoException
  * 内容摘要:空参构造方法,调用父类的空参构造方法
  * @roseuid 4316C37E00FD
  */
 public EccInfoException()
 {
  super();

 }

 /**
  * 方法编号:05
  * 方法名称:EccInfoException
  * 内容摘要:含异常信息的构造期
  * @roseuid 4316C37E00FD
  */
 public EccInfoException(
  String appName,
  String errorLayer,
  String moduleName,
  String className,
  String errorCode,
  Exception exception)
 {
  //初始化异常
  getEccExceptionInfoBO().getEccExceptionInfoVO().setException(exception);
  //设置系统名称
  getEccExceptionInfoBO().getEccExceptionInfoVO().setAppName(appName);
  //设置异常发生的层
  getEccExceptionInfoBO().getEccExceptionInfoVO().setErrorLayer(errorLayer);
  //设置模块名称
  getEccExceptionInfoBO().getEccExceptionInfoVO().setModuleName(moduleName);
  //设置类名称
  getEccExceptionInfoBO().getEccExceptionInfoVO().setClassName(className);
  //初始化方法名称(调用私有方法自动获得)
  getEccExceptionInfoBO().getEccExceptionInfoVO().setMethodName(getMethodName(exception));
  //设置异常键
  getEccExceptionInfoBO().getEccExceptionInfoVO().setErrorKey(EccExceptionComm.ERROR_KEY);
  //设置异常码
  getEccExceptionInfoBO().getEccExceptionInfoVO().setErrorCode(errorCode);
  //初始化异常消息名称
  getEccExceptionInfoBO().getEccExceptionInfoVO().setExceptionMessage(getExceptionDetailsMessage(exception));
 }
 
 /**
  *方法编号:06
  *方法名称:getMethodName
  *内容摘要:返回调用该方法的方法名
  *
  *@param e
  *@return methodname
  */
 private String getMethodName(Exception e)
 {

  String input = getExceptionDetailsMessage(e);

  StringReader sr = new StringReader(input);

  BufferedReader br = new BufferedReader(sr);

  String line = "";
  String methodName = "";

  try
  {
   //读入一行数据
   br.readLine();
   line = br.readLine();
  }
  catch (IOException ex)
  {
   ex.printStackTrace();
  }
  //截取"("前的字符串
  int paren = line.indexOf('(');
  
  //判断是否存在左括号
  if(paren > 0)
  {
   line = line.substring(0, paren);
   //截取"."前的字符串
   int period = line.lastIndexOf('.');
   //判断是否存在点
   if(period > 0)
   {
    methodName = line.substring(period + 1); 
   }
   else
   {
    methodName = "SystemMethod";
   }
   //判断方法名称长度是否大于50字符
   if(methodName.length() >50)
   {
    methodName = "SystemMethod";
   }
  }
  else
  {
   methodName = "SystemMethod";
  }
  
  // 查找iBatis抛出的Exception
  if (methodName.equals("SystemMethod"))
  {
   try
   {
    // 读取所有异常信息
    while (true)
    {
     
     // 读取一行
     line = br.readLine();
     if (line == null)
      break;
     
     // 判断是否包含DAO.字样
     int nDAO = line.indexOf("DAO.");
     if (nDAO > 0)
     {
      paren = line.indexOf('(', nDAO);
      // 是否有括号
      if (paren > 0)
      {
       Debug.println("current line = " + line);
       
       // 取出方法名
       methodName = line.substring(nDAO+4, paren);

       //判断方法名称长度是否大于50字符
       if(methodName.length() >50)
       {
        methodName = "SystemMethod";
       }
       
       break;
      }
     }
    }
   }
   catch (IOException ex)
   {
    ex.printStackTrace();
   }
  }
   
  //返回处理后的字符串
  return methodName;
 }
 
 /**
  *
  * 方法名称: getExceptionDetailsMessage
  * 内容摘要: 获得堆栈信息
  *
  * @param e 异常
  * @return String
  */
 private String getExceptionDetailsMessage(Exception e)
 {
  //声明输出信息
  String input = null;
  //初始化StringWriter
  StringWriter sw = new StringWriter();
  //初始化PrintWriter
  PrintWriter pw = new PrintWriter(sw);
  //打印堆栈
  e.printStackTrace(pw);
  //获得堆栈信息
  input = sw.getBuffer().toString();
  return input;
 }
 
 /**
  * @return
  */
 public EccExceptionInfoBO getEccExceptionInfoBO()
 {
  return eccExceptionInfoBO;
 }

 /**
  * @param infoBO
  */
 public void setEccExceptionInfoBO(EccExceptionInfoBO infoBO)
 {
  eccExceptionInfoBO = infoBO;
 }

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑卡住了怎么办 鼠标也点不动 善领wifi连上网不能用怎么办 苹果手机软件更新后网速太慢怎么办 装了固态硬盘开机还慢怎么办 华为荣耀8青春版玩游戏卡怎么办 光猫自带wifi网络很差怎么办 侠盗猎车手自由城之章卡退怎么办? 夏天带头盔晃眼睛太厉害怎么办 别人把钱误转我卡上我怎么办? 家里预留的的网线太短怎么办 电信路由器坏了网线接口断了怎么办 数据线充手机的接头处断了怎么办 新买的小米手环充不进去电怎么办 绝地求生手游被队友故意炸死怎么办 一加3t屏幕开了怎么办? 孕妇吃了8个杏怎么办啊 洗碗盆落水器垫子密封不好怎么办? 手剥橙子剥的特别疼怎么办? 经常带对讲机的耳麦耳朵痛怎么办 公安检查遇到穿便装的军人怎么办 cf幽灵鬼呼吸辅军训刘海怎么办助 眼睛被等离子切割器的光烤了怎么办 玩王者的时候屏幕竖着了该怎么办 铝合金门双包门套比墙的厚了怎么办 磁共振检查后发现带金属了怎么办 贴了乳贴过免痒怎么办 yy别人听见我打游戏的声音怎么办 微信的聊天记录发错邮箱怎么办 百度云盘文件有违规内容怎么办 天籁一键启动钥匙没电怎么办 中兴手机系统界面已停止运行怎么办 怎么办可以复制成不关联的文档 希捷400g硬盘电机不转怎么办 金立手机微信语音播放失败怎么办 手机4g网络变2g怎么办 生存战争2吃了腐烂的食物后怎么办 古筝调音 d的显示为b怎么办 消防建审没有原有的结构图纸怎么办 生石灰弄到脸上用水洗后发热怎么办 吃了没熟的鹅肝怎么办 蹲式厕所被袜子堵了怎么办