`
xcy13638760
  • 浏览: 52470 次
社区版块
存档分类
最新评论

异常处理经验小结之一:不要直接抛出InvocationTargetException

 
阅读更多

在最近一段时间的工作中,积累了几点异常处理的经验,怕时间久了就淡忘了,因此写下本文记录下来,一遍日后总结和查看。

1.在通过反射执行方法的时,如Method.invoke(),如果被反射执行的方法体抛出了Exception,这个异常会被包装成InvocationTargetException重新抛出,下面是jdk里面的源码:

Java代码 收藏代码
  1. publicObjectinvoke(Objectobj,Object...args)
  2. ows<spanstyle="color:#ff0000;">IllegalAccessException</span>,IllegalArgumentException,
  3. InvocationTargetException
  4. {
  5. ...........此处省略.....
  6. }

比如反射方法里抛出了NullPointException,则Method.invoke方法抛出的是InvocationTargetException,而不是NullPointException,见下面的例子,此处抛出的就是InvocationTargetException。

但是InvocationTargetException太过于宽泛,在trouble shouting的时候,不能给人非常直观的信息,所以在处理反射方法异常的时候,我们需要把这个InvocationTargetException的targetException提取处理,重新抛出,因为这个才是对我们分析程序bug真正有帮助的异常:

Java代码 收藏代码
  1. publicclassInvokeException{
  2. @SuppressWarnings("null")
  3. publicvoidtestException(){
  4. StringnullString=null;
  5. nullString.toString();
  6. }
  7. publicstaticvoidmain(String[]args)throwsThrowable{
  8. //TODOAuto-generatedmethodstub
  9. try{
  10. InvokeExceptioninvokeException=newInvokeException();
  11. Methodmethod=invokeException.getClass().getMethod("testException");
  12. method.invoke(invokeException);
  13. }catch(Exceptione){
  14. if(einstanceofInvocationTargetException){
  15. throw((InvocationTargetException)e).getTargetException();
  16. }else{
  17. //doXXX()
  18. }
  19. }
  20. }
  21. }

下一篇讲介绍如何利用Spring的aop来把程序中的check exception转化成自定义的uncheck exception.

分享到:
评论

相关推荐

    axis2 InvocationTargetException

    如果方法内部抛出了异常,但没有被捕获和处理,就会导致InvocationTargetException。 3. **数据验证**:确保传入服务的方法参数有效且符合预期。无效或不匹配的数据类型可能导致运行时异常。 4. **配置检查**:...

    解决axis2-CodegenWizardPluginBUG- java.lang.reflect.InvocationTargetException

    然而,在运行此插件时,由于某些原因可能会抛出`java.lang.reflect.InvocationTargetException`,这是一个反射调用异常,通常表示在调用某个方法时发生了异常。 `InvocationTargetException`通常作为Java标准库中的...

    MyEclipse6.0下axis2插件的安装-java.lang.reflect.InvocationTargetException

    ### MyEclipse 6.0 下 Axis2 插件的安装及解决 java.lang.reflect.InvocationTargetException #### 一、概述 在使用 MyEclipse 6.0 进行 Web 服务开发时,可能会遇到需要安装 Axis2 插件的情况。Axis2 是 Apache ...

    scrcpy投屏 AssertionError: java.lang.reflect.InvocationTargetExcep

    `AssertionError`是Java中用于断言失败的异常,而`InvocationTargetException`则是在调用方法时抛出的异常,通常与方法内部的异常处理有关。 解决这个问题的方法可能有以下几点: 1. **检查版本兼容性**:确保你的...

    axis2(1.4.1) eclipse plugin 解决InvocationTargetException问题

    在apache上下载的axis2的eclipse插件,使用axis2-eclipse-codegen-wizard时,最后老是报InvocationTargetException异常。 现在上传的版本已经修正,和原版功能完全一样

    MyEclipse axis2 wsdl java.lang.reflect.invocationtargetexception

    MyEclipse axis2 wsdl java.lang.reflect.invocationtargetexception code gen 大家要注意一定要仔细,这个问题基本上缺少包引起的,而且一定要clean 如果需要axis2插件 以及这个plugins中的包在我的其他资源里面有

    wsdl生成java客户端报错

    java.lang.reflect.invocationtargetexception问题的解决方法之一

    wsdl生成java客户端报错问题解决方法

    解决使用wsdl生成java客户端报错:java.lang.reflect.invocationtargetexception的方法之一

    dubbo捕获自定义异常_dubbo异常捕获_dubbo异常_自定义异常_捕捉异常_

    在分布式服务框架 Dubbo 中,异常处理是必不可少的一部分。Dubbo 提供了强大的异常处理机制,使得服务提供者能够向消费者传递自定义异常,从而帮助消费者更好地理解和处理服务调用中的错误情况。本文将深入探讨如何...

    webservice启动没有问题,通过自动生成的客户端报错

    faultString: java.lang.reflect.InvocationTargetException faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace: AxisFault faultCode: {...

    jsp常见异常总结 希望有所帮助

    当调用方法时,如果被调用的方法抛出了异常,那么这个异常会被封装在这个InvocationTargetException中。在JSP中,这可能发生在使用反射API执行方法时。 10. **java.lang.StackOverflowError** 当Java虚拟机的堆栈...

    Java reflect 机制详解

    免费共享,很详细的介绍了反射机制的原理,适合追根究底的java学习者

    IllegalAccessException.md

    6. 具体异常类型的处理:在处理反射中可能出现的异常时,我们需要分别处理NoSuchMethodException、IllegalAccessException和InvocationTargetException这些异常。它们分别表示没有找到相应的方法、方法无法访问以及...

    InstantiationException(解决方案).md

    需要注意的是,当使用`newInstance()`方法时,如果构造函数抛出了异常,那么这些异常会被封装在InvocationTargetException异常中。因此,实际捕获和处理的是InvocationTargetException异常。 总结起来,处理...

    J2EE项目异常处理的几种方案

    这样,每当应用程序中抛出`Exception`或其子类时,系统会自动跳转至指定的错误页面,从而简化了异常处理流程,提高了系统的健壮性。 #### 三、异常层次结构设计 为了更好地管理和响应不同类型的异常,建议构建一套...

    java.lang.InstantiationException(解决方案).md

    在执行这一操作时,我们同样需要注意捕获并处理可能抛出的NoSuchMethodException、IllegalAccessException、InvocationTargetException等异常。NoSuchMethodException发生在无法找到指定参数类型匹配的构造函数时,...

    Junit调用SoapUI

    1、本测试demo使用mavan管理jar 2、重点参考TestSoapUI5 3、重写WsdlTestCaseRunner 4、需要单独配置maven仓库http://www.soapui.org/repository/maven2/

    java深度复制源代码

    - **异常**:抛出`IntrospectionException`、`IllegalArgumentException`、`IllegalAccessException`、`InvocationTargetException`等异常。 - **设置Bean的属性值**: ```java public static final void ...

    ireport测试

    在IT行业中,报表生成是企业应用中不可或缺的一部分,而`iReport`则是一款强大的报表设计工具,它与MyEclipse、Struts2等框架结合,能够帮助开发者轻松创建复杂的业务报表。本文将深入探讨`iReport`在Java开发中的...

Global site tag (gtag.js) - Google Analytics