Thanks. But in my example , I cannot modify BufferedImage (to add a no-arg constructor) What should I do if I want to output a BufferedImage (and make back button work) ?
2013/5/14 Jonas <[email protected]> > This could only work if BufferedImage itself had a no-arg constructor. > It is it the first non-serializable class in the hierarchy that needs to > have it, > not the first serializable one, like in your example. > Besides, you would still lose all data stored in the BufferedImage's fields > (i.e. > the image stored in it). > > > On Mon, May 13, 2013 at 7:15 PM, smallufo <[email protected]> wrote: > > > Today I encountered one famous deserialization problem : > > InvalidClassException : no valid constructor > > > > I googled and found some solution , but all are in-vain. > > The solution says the first non-serializable super class should define a > > no-arg constructor. > > > > But I try to define a no-arg constructor to EACH class of the HIERARCHY , > > and EACH class implements Serializable... (which is not necessary , but I > > want to make it simple , to pinpoint the problem) > > > > My base class is an abstract class extends BufferedImage (java 2D) > > while BufferedImage is not Serializable > > So I make my abstract class implements Serializable and define a no-arg > > default constructor. > > > > The total hierarchy is : > > public abstract class AbstractChart extends BufferedImage implements > > Serializable { > > public AbstractChart() { // I try to remove this constructor , > > but in vain > > super(0 , 0, TYPE_INT_ARGB); > > } > > } > > > > and first child class : > > > > public class ChildChart extends AbstractChart implements Serializable { > > public ChildChart() { > > super(); // or not calling super() > > } > > } > > > > and the grandson class : > > > > public class GrandsonChart extends ChildChart implements Serializable { > > public GrandsonChart() { > > super(); // or not calling super() > > } > > } > > > > No matter I calls super() in ChildChart or GrandsonChart , > > > > Caused by: java.io.InvalidClassException: foobar.GrandsonChart; no valid > > constructor > > > > It happens when I click a button ,use ajax to paint this GrandsonChart , > > and click another page , and use browser back . > > The browser will be redirected to /context/wicket/page?xxx (The error > page) > > The screen shows : > > Could not deserialize object using: > > class > > > > > org.apache.wicket.serialize.java.JavaSerializer$ClassResolverObjectInputStream > > > > and in the console log , I can see this InvalidClassException is thrown. > > > > Any way to solve this problem ? > > (I've already added default no-arg constructor , and make each class > > implements Serializable , but still not working ) > > > > environment : > > Wicket version : 6.7 > > Resin 4.0.25 > > Java HotSpot(TM) 64-Bit Server VM 20.4-b02-402, 64, mixed mode, Apple Inc > > (It happens on Linux JDK too) > > >
