2012-08-01 51 views
0

我正在使用GSON。當我啓動tomcat時,它給我錯誤。我的代碼部分:GSON在JSF託管bean中不可序列化

@ManagedBean(name = "kpilist") 
@ViewScoped 
public class KPIListController implements Serializable { 

    public List<KPI> getKPI() { 
     KPIDAO kpiDAO = new KPIDAO();   
     List<KPI> kpiList = new ArrayList<KPI>(); 
     Gson gson = new Gson(); 
     try { 
      kpiList = kpiDAO.getKPI(selectedKPIType);  
      json = gson.toJson(kpiList) ; 
      Logger.getLogger(KPIListController.class.getName()).warning("The KPI JSON" + json); 
     } catch (SQLException ex) { 
      ex.printStackTrace(); 
      return null; 
     } 
     return kpiList; 
    } 

WARNING: Cannot serialize session attribute com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap for session 41AC6C7AB4B0869A29778EA4155BFCA1 
    java.io.NotSerializableException: com.google.gson.Gson 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180) 
     at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
     at java.util.HashMap.writeObject(HashMap.java:1014) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
     at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
     at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
     at java.util.HashMap.writeObject(HashMap.java:1014) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
     at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1362) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1170) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
     at java.util.HashMap.writeObject(HashMap.java:1014) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
     at java.util.HashMap.writeObject(HashMap.java:1014) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:601) 
     at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962) 
     at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480) 
     at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) 
     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) 
     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) 
     at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1692) 
     at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1092) 
     at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:411) 
     at org.apache.catalina.session.StandardManager.unload(StandardManager.java:353) 
     at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:497) 
     at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) 
     at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5449) 
     at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) 
     at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1540) 
     at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1530) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
     at java.lang.Thread.run(Thread.java:722) 

我做了使用GSON任何錯誤?

回答

2

在你的代碼中我看不到它,但它看起來像是一個包含Gson的成員變量,可能是間接的(它甚至可以是一個匿名類實例捕獲它)。 AFAIK,例外說Gson不是Serializable,`這是可以的,因爲你很可能不想存儲它。

+0

我沒有會員變數Gson!那麼,我有功能變量,但。是的,我不想存儲它:)! – kinkajou 2012-08-03 08:30:33

+0

@Kitex:你不想要,但你這樣做。使用調試器來找出它來自哪裏。這個例外說得很清楚,看着我無法想象的其他原因的源代碼。 – maaartinus 2012-08-03 13:28:19