自定义异常的 UndeclaredThrowableException
UndeclaredThrowableException for custom Exceptions
我目前正在做一个项目 运行ning 一个 jboss 后端服务器(server-ear:ear exploded artefact)和一个 java gui(java 11) 作为前端。
后端包含一个 java 服务 bean,它访问数据库服务器并在找不到变量时抛出自定义异常(扩展异常)。 GUI 使用 try 和 catch 块捕获自定义异常。
代码是在 Intellij + Maven 中构建和 运行。
如果我尝试执行以下代码,则在 运行 时弹出箭头:
Thread AWT-EventQueue-0: null
java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy36.expandDbVar(Unknown Source)
...
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at ...ServiceLoggingInvocationHandler.invoke(ServiceLoggingInvocationHandler.java)
... 56 more
Caused by: ...utils.CustomException: Database Variable not found for id "input".
at deployment.server-ear.ear.some-ejb.jar//...DbVarSvcBean.expandDbVar(DbVarSvcBean.java)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.as.ee@20.0.0.Final//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
...
代码本身在多台计算机上进行了测试,所有计算机都正确捕获了异常。 (只有我的电脑遇到这些问题)。
jboss 服务器已添加为 Intellji 中的应用程序服务器。
构建配置是 jboss 本地的,带有 server-ear:ear exploded 工件。
上周一切正常,但突然停止工作。我已经尝试过重置所有内容,干净地安装它,甚至尝试使用 ubuntu.
进行干净的电脑设置
我尝试了许多不同的构建设置,切换了 java 版本等。有人知道是什么导致了这种行为吗?
所以对于任何对问题所在感兴趣的人:
由于我们使用的是自定义记录器 (ServiceLoggingInvocationHandler),它尝试捕获调用方法的异常,捕获的异常已经被调用异常包裹,而不是原始异常。为了解决这个问题,我们需要在转发之前再次解包异常。
由于记录器仅在调试模式下使用,并且仅在指定时才出现该问题。
我目前正在做一个项目 运行ning 一个 jboss 后端服务器(server-ear:ear exploded artefact)和一个 java gui(java 11) 作为前端。
后端包含一个 java 服务 bean,它访问数据库服务器并在找不到变量时抛出自定义异常(扩展异常)。 GUI 使用 try 和 catch 块捕获自定义异常。
代码是在 Intellij + Maven 中构建和 运行。
如果我尝试执行以下代码,则在 运行 时弹出箭头:
Thread AWT-EventQueue-0: null
java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy36.expandDbVar(Unknown Source)
...
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at ...ServiceLoggingInvocationHandler.invoke(ServiceLoggingInvocationHandler.java)
... 56 more
Caused by: ...utils.CustomException: Database Variable not found for id "input".
at deployment.server-ear.ear.some-ejb.jar//...DbVarSvcBean.expandDbVar(DbVarSvcBean.java)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.jboss.as.ee@20.0.0.Final//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
...
代码本身在多台计算机上进行了测试,所有计算机都正确捕获了异常。 (只有我的电脑遇到这些问题)。
jboss 服务器已添加为 Intellji 中的应用程序服务器。 构建配置是 jboss 本地的,带有 server-ear:ear exploded 工件。
上周一切正常,但突然停止工作。我已经尝试过重置所有内容,干净地安装它,甚至尝试使用 ubuntu.
进行干净的电脑设置我尝试了许多不同的构建设置,切换了 java 版本等。有人知道是什么导致了这种行为吗?
所以对于任何对问题所在感兴趣的人:
由于我们使用的是自定义记录器 (ServiceLoggingInvocationHandler),它尝试捕获调用方法的异常,捕获的异常已经被调用异常包裹,而不是原始异常。为了解决这个问题,我们需要在转发之前再次解包异常。
由于记录器仅在调试模式下使用,并且仅在指定时才出现该问题。