java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy BUG排查

将某个子项目从war包转化为jar包打包方式后。忘记修改pom.xml中对servlet-api等的修改。

<dependency>
	<groupId>javax</groupId>
	<artifactId>javaee-api</artifactId>
	<version>8.0</version>
	<scope>provided</scope>
</dependency>

因此在开发环境中,因为ecplise中自带有javaee-api包。没有发现任何问题,然后在用java -jar方式中运行时,出现BUG

java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy

在类似服务器部署环境没法进行debugger的条件下,正好这两天看了arthas 可以类似aop,监听某方法的调用等。刚好能查看一下这个莫名奇妙的异常信息。

arthas 的操作主要有两步:

  • 打开 arthas options unsafe (对系统级别的类进行增强)。因为sun.reflect.annotation.TypeNotPresentExceptionProxy类是系统类,直接watch监听会报No class or method is affected;
  • watch sun.reflect.annotation.TypeNotPresentExceptionProxy * params[1] 此处因为TypeNotPresentExceptionProxy的构造器的定义是 TypeNotPresentExceptionProxy(String var1, Throwable var2),我选择的是看异常堆栈信息。

于是就终于看到正常的异常信息了:

$ watch sun.reflect.annotation.TypeNotPresentExceptionProxy * params[1]
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:2) cost in 96 ms.
ts=2019-02-19 16:54:24; [cost=1.9308ms] result=java.lang.ClassNotFoundException: javax.json.bind.Jsonb
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(Unknown Source)

最后,去掉pom中的 scope 节,就可以在MANIFEST.MF 中查看到javaee-api包。项目正常运行。

参考: https://blog.csdn.net/hengyunabc/article/details/79475505 https://github.com/alibaba/arthas

转载于:https://my.oschina.net/yuyizyk/blog/3012044

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值