Re: Serialization Trouble through Inheritance
Oliver Ruebenacker <[email protected]> Thu, 9 Aug 2012 11:03:52 -0400
| Newsgroups | gmane.comp.java.jdom.general |
|---|---|
| Message-ID | <CAA=X4OD933JVuPEdJoQXBxMsiBdXW-FQ2v96ELF-8xJfyvR+ZQ@mail.gmail.com> |
Hello,
Rolf, it shouldn't be necessary to add these methods.
Björn, can you check the import statement for Element?
Take care
Oliver
On Thu, Aug 9, 2012 at 10:37 AM, Rolf Lear <[email protected]> wrote:
>
> Hi Björn
>
> I don't have my 'JDOM Laptop' with me at the moment, so I can't easily
> reproduce your problem, but, I suspect this is just an issue of
> implementing your own read/write object methods.
>
> What happens if you add the following methods to your 'MyElement' class? I
> believe this should fix things..... try it... :-)
>
>
>
> /**
> * Serialize out the MyElement.
> *
> * @serialData
> * The Stream protocol is:
> * <ol>
> * <li>Write the super Element class out...
> * </ol>
> *
> * @param out where to write the Element to.
> * @throws IOException if there is a writing problem.
> */
> private void writeObject(final ObjectOutputStream out) throws IOException
> {
> out.defaultWriteObject();
> }
>
> /**
> * Read a MyElement off the ObjectInputStream.
> *
> * @see #writeObject(ObjectOutputStream)
> * @param in where to read the Element from.
> * @throws IOException if there is a reading problem.
> * @throws ClassNotFoundException when a class cannot be found
> */
> private void readObject(final ObjectInputStream in)
> throws IOException, ClassNotFoundException {
> in.defaultReadObject();
> }
>
>
> Rolf
>
>
>
> On Thu, 09 Aug 2012 16:08:48 +0200, Björn Buchner
> <[email protected]> wrote:
>> Hi Folks,
>>
>> I am using the JDOM 2.0.2 release and experienced some trouble when it
>> comes to serialization.
>>
>> De-/serializing an Element object through the standard
>> ObjectOutput/InputStream is no problem. Trouble starts when I try to
>> deserialize an object of a class that inherits from Element.
>>
>> It always ends with a InvalidClassException: no valid constructor.
>> Normally this indicates that JRE is missing a public default
>> constructor, but as you can see in the example below the subclass
>> has a default constructor.
>>
>> Thanks in advance for your help
>>
>> Example code:
>>
>> public class MyElement extends Element {
>>
>> private static final long serialVersionUID = -4220756491425652053L;
>>
>> public MyElement() {
>> super();
>> }
>>
>>
>> public static void main(String ... args) throws IOException,
>> ClassNotFoundException {
>> ByteArrayOutputStream buffer = new ByteArrayOutputStream();
>> ObjectOutputStream outStream = new ObjectOutputStream(buffer);
>>
>> MyElement element = new MyElement();
>>
>> outStream.writeObject(element);
>> outStream.flush();
>> ObjectInputStream inStream = new ObjectInputStream(new
>> ByteArrayInputStream(buffer.toByteArray()));
>> element = (MyElement)inStream.readObject();
>> }
>> }
>>
>> Result:
>>
>> Exception in thread "main" java.io.InvalidClassException:
>> <packageremoved>; no valid constructor
>> at
>>
> java.io.ObjectStreamClass$ExceptionInfo.newInvalidClassException(ObjectStreamClass.java:147)
>> at
>> java.io.ObjectStreamClass.checkDeserialize(ObjectStreamClass.java:755)
>> at
>>
> java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1751)
>> at
> java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
>> at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
>> at <packageremoved>.main(MyElement.java:29)
> _______________________________________________
> To control your jdom-interest membership:
> http://www.jdom.org/mailman/options/jdom-interest/[email protected]
--
Java Developer (Bioinformatics) at PanGenX (http://www.pangenx.com)
President and Founder of Knowomics
(http://www.knowomics.com/wiki/Oliver_Ruebenacker)
Consultant at Predictive Medicine
(http://predmed.com/people/oliverruebenacker.html)
SBPAX: Turning Bio Knowledge into Math Models (http://www.sbpax.org)
_______________________________________________
To control your jdom-interest membership:
http://www.jdom.org/mailman/options/jdom-interest/[email protected]