Re: Deserialization InvalidClassException : no valid constructor

2013-05-27 Thread smallufo
I solve this problem by making the BufferedImage transient.



2013/5/27 Jonas 

> Well, you can't serialize the BufferedImage, but maybe you can serialize
> whatever data you've used to render BufferedImage's contents,
> i.e. instead of saving the image, save whatever is necessary to recreate
> the image?
> Or, you could store the BufferedImage's content to an actual image file
> (using ImageIO)?
>
>
> On Wed, May 22, 2013 at 5:39 AM, smallufo  wrote:
>
> > 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 
> >
> > > 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  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)
> > > >
> > >
> >
>


Re: Deserialization InvalidClassException : no valid constructor

2013-05-27 Thread Jonas
Well, you can't serialize the BufferedImage, but maybe you can serialize
whatever data you've used to render BufferedImage's contents,
i.e. instead of saving the image, save whatever is necessary to recreate
the image?
Or, you could store the BufferedImage's content to an actual image file
(using ImageIO)?


On Wed, May 22, 2013 at 5:39 AM, smallufo  wrote:

> 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 
>
> > 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  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)
> > >
> >
>


Re: Deserialization InvalidClassException : no valid constructor

2013-05-21 Thread smallufo
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 

> 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  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)
> >
>


Re: Deserialization InvalidClassException : no valid constructor

2013-05-14 Thread Jonas
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  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)
>


Deserialization InvalidClassException : no valid constructor

2013-05-13 Thread smallufo
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)