2016-08-25 76 views
0

web服务器:tomcat的GSON TypeToken ClassNotFoundException的

web框架:spring3

我用GSON-2.3.1

后续错误日志

java.lang.ClassNotFoundException: com.mysite.chart.**ChartCtrl$2** 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 
**at com.mysite.chart.ChartCtrl.msyData(ChartCtrl.java:278)** 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 

和ChartCtrl 278线就是按照

Type objType = new TypeToken<ArrayList<HashMap<String, Object>>>(){}.getType(); 

我该如何解决这个问题。

回答

0

ClassNotFoundException如果找不到具有指定名称的类的定义,并且通过查看堆栈跟踪,因为它包含$ 2,则会引发您相信您(或某人)正在使用某个内部类或匿名内部类使用一些不包含在.war文件中的库。

在这个特定的情况下,我猜你没有将包含TypeToken类的gson jar包装到你的WEB-INF/lib文件夹中。你可否确认?

+0

GSON-2.3.1.jar是在WEB-INF/lib中。 Same Class的其他方法使用它,但工作正常。 –

+0

如果是这种情况,那么正如我所提到的,你的班级是否有一些内部班级或匿名班级?这是在运行时解决的典型类路径问题。 –

+0

我不使用内部类。 ChartCtrl类没有内部类。 我不知道为什么找到ChartCtrl $ 2类.. –

1

我也遇到过这个问题,在我的情况下,我导入了错误的类,它以某种方式在IDE的类路径中可用,但在运行时不可用。

更换以下之一:

import com.google.common.reflect.TypeToken; 

有了这一个:

import com.google.gson.reflect.TypeToken;