博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OGNL报错:Exception in thread "main" java.lang.ExceptionInInitializerError
阅读量:6665 次
发布时间:2019-06-25

本文共 2280 字,大约阅读时间需要 7 分钟。

使用OGNL进行简单的测试时,获取对象的属性,结果出现报错,信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Exception in thread 
"main" 
java.lang.ExceptionInInitializerError
    
at ognl.ASTProperty.getValueBody(ASTProperty.java:
114
)
    
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:
212
)
    
at ognl.SimpleNode.getValue(SimpleNode.java:
258
)
    
at ognl.Ognl.getValue(Ognl.java:
494
)
    
at ognl.Ognl.getValue(Ognl.java:
644
)
    
at ognl.Ognl.getValue(Ognl.java:
702
)
    
at ognl.Ognl.getValue(Ognl.java:
672
)
    
at OGNL1.main(OGNL1.java:
15
)
Caused by: java.lang.IllegalArgumentException: Javassist library is missing in classpath! Please add missed dependency!
    
at ognl.OgnlRuntime.<clinit>(OgnlRuntime.java:
168
)
    
... 
8 
more
Caused by: java.lang.ClassNotFoundException: javassist.ClassPool
    
at java.net.URLClassLoader$
1
.run(URLClassLoader.java:
372
)
    
at java.net.URLClassLoader$
1
.run(URLClassLoader.java:
361
)
    
at java.security.AccessController.doPrivileged(Native Method)
    
at java.net.URLClassLoader.findClass(URLClassLoader.java:
360
)
    
at java.lang.ClassLoader.loadClass(ClassLoader.java:
424
)
    
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:
308
)
    
at java.lang.ClassLoader.loadClass(ClassLoader.java:
357
)
    
at java.lang.Class.forName0(Native Method)
    
at java.lang.Class.forName(Class.java:
260
)
    
at ognl.OgnlRuntime.<clinit>(OgnlRuntime.java:
165
)
    
... 
8 
more

然后检查了一下发现是关键的包没有导入,使用OGNL需要导入两个关键的包,分别是:ognl-xxx.jar 和 javassist-xxx.GA.jar ,将这两个包导入后,运行正常

测试实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import 
ognl.Ognl;
import 
ognl.OgnlException;
 
public 
class 
OGNL1 {
 
    
/**
     
* @param args
     
*/
    
public 
static 
void 
main(String[] args) {
        
Person person = 
new 
Person();
        
person.setName(
"xiaoming"
);
        
try 
{
            
System.out.println(Ognl.getValue(
"passwd"
, person));  
             
            
Object valueObject = Ognl.getValue(
"name"
, person);        
            
System.out.println(valueObject);
             
             
        
catch 
(OgnlException e) {
            
// TODO Auto-generated catch block
            
e.printStackTrace();
        
}  
 
    
}
 
}
 
class 
Person{
    
public 
String passwd = 
"root"
;
    
private 
String name;
 
    
public 
String getName() {
        
return 
name;
    
}
 
    
public 
void 
setName(String name) {
        
this
.name = name;
    
}
     
     
}

注:对于有访问权限的字段,无需getter方法

输出:

root

xiaoming

本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1701364,如需转载请自行联系原作者

你可能感兴趣的文章
前端资料整理
查看>>
html 中几次方,平方米,立方米,下标,上标,删除线等的表示方法
查看>>
php数组
查看>>
关于找工作时的境遇与情绪波动
查看>>
MVC实用笔记
查看>>
C#控件绑定数据源方式
查看>>
【级数】 求和
查看>>
类型检测
查看>>
十九、oracle pl/sql简介
查看>>
LintCode刷题——解码方法
查看>>
C语言万年历(含文档报告)[专业程序代写-擅长C语言C++JavaJSP]
查看>>
[HNOI2012]集合选数
查看>>
PHP中eval函数的危害与正确禁用方法
查看>>
iOS-APP图标和启动页的尺寸
查看>>
原型链 之 对象的创建
查看>>
HTTP状态码详解
查看>>
CSS3属性之transform学习笔记
查看>>
字符串的各种操作
查看>>
android把数据库伪装成so文件
查看>>
logstash采集与清洗数据到elasticsearch案例实战
查看>>