0

私は別のフレームワークで春を使用しており、シリアライゼーションは初めてです。

何の問題:

org.eclipse.jetty.websocket.api.Session セッション (シリアル化できない) を含む MyClass オブジェクトをシリアル化する必要があります。

class MyClass {
  private org.eclipse.jetty.websocket.api.Session session; //NON-Serializable!

  private void writeObject(java.io.ObjectOutputStream out) throws IOException{
    out.writeObject(session);
  }

   private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
      session = (org.eclipse.jetty.websocket.api.Session) in.readObject();
   }
}

質問は何ですか:

hereから、シリアル化できないフィールドでオブジェクトをシリアル化できることを読みました。しかし、org.eclipse.jetty.websocket.api.Session には自明ではないクラス階層があります。

しかし、そうしようとすると、 java.io.NotSerializableException: org.eclipse.jetty.websocket.common.WebSocketSession がスローされます

4

2 に答える 2

1

ClassPathXmlApplicationContext が Serializable である場合、このコンテキストで作成されたすべてのオブジェクトをコンテキストと一緒に Serialize する必要があるため、意味がないと思います。代わりに、application.xml を保存してファイルから読み取り、そこから ClassPathXmlApplicationContext を再作成することができます。コンテキストフィールドのシリアル化を防ぐには、シャミムズが提案したように一時的にするか、 MyClass インスタンスをシリアル化する前に単純に null にすることができます

于 2013-08-27T07:56:47.623 に答える
1
class MyClass {
 private transient ClassPathXmlApplicationContext  context; //NON-Serializable!

}

于 2013-08-27T07:53:36.050 に答える