2016-08-25 75 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;