2012-08-01 4 views
0

GSON을 사용하고 있습니다. 내가 바람둥이를 시작할 때 그것은 나에게 오류를 준다. 내 코드의 일부 :GSON이 JSF 관리 빈에서 직렬화되지 않습니다.

@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, 예외는 GsonSerializable이 아니며, 어쨌든 저장하고 싶지 않으므로 OK입니다.

+0

회원 변수 Gson이 없습니다! 글쎄, 나는 함수에서 변수가있다. 참으로 나는 그것을 저장하고 싶지 않다 :)! – kinkajou

+0

@Kitex : 너는하고 싶지는 않지만 너는 해. 디버거를 사용하여 어디서 왔는지 알아보십시오. 예외는 그것을 아주 명확하게 말하고 나는 다른 어떤 이유도 상상할 수없는 소스 코드를보고있다. – maaartinus

관련 문제