3 Star 18 Fork 20

peipeihh/simple-demo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

1. 简介

本项目主要演示Java Agent中使用fastjson导致宿主应用出现找不到类的异常问题。

更多详细介绍,请见博客文章Java Agent中使用fastjson导致宿主应用出现找不到类的异常问题

2. 项目结构

整个工程结构如下,

+ simple-agent 这是一个简单的java agent
  + src
  - target
    - simple-agent.jar
+ simple-app 这是一个简单的app应用
  + src
  - target
    - simple-app.jar

3. 项目构建和运行

构建和运行环境为,

  • Java 8
  • Maven 3

本项目使用maven 3+进行构建,命令为,

mvn clean package

第一步,直接运行simple-app,命令如下

java -jar ./simple-app/target/simple-app.jar

可以看到程序正常运行,并有相关日志输出。

$ java -jar ./simple-app/target/simple-app.jar

this is a simple app...
fastJsonMessageConverter has been created successfully.

FastJsonHttpMessageConverter对象被成功创建出来。

第二步,运行simple-app并加载agent,命令如下

# 启动命令(加载simple-agent)
java -javaagent:./simple-agent/target/simple-agent.jar -jar ./simple-app/target/simple-app.jar

可以看到程序在运行到new FastJsonHttpMessageConverter时报如下错误,问题得到复现。

$ java -javaagent:./simple-agent/target/simple-agent.jar -jar ./simple-app/target/simple-app.jar

this is a demo agent...
this is a simple app...
Exception in thread "main" java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: java.lang.NoClassDefFoundError: org/springframework/http/converter/GenericHttpMessageConverter
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
	at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at com.pphh.demo.SimpleApp.main(SimpleApp.java:17)
	... 8 more
Caused by: java.lang.ClassNotFoundException: org.springframework.http.converter.GenericHttpMessageConverter
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 23 more

4. 演示

见上面。

5. 联系 Contact

邮箱地址:peipeihh@qq.com,欢迎来信联系。

更多的信息,可以访问博客地址:hyhblog.cn

6. 开源许可协议 License

Apache License 2.0

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/pphh/simple-demo.git
git@gitee.com:pphh/simple-demo.git
pphh
simple-demo
simple-demo
master

搜索帮助