classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cp-patches] RFC: XMLEncoder and related infrastructure


From: Robert Schuster
Subject: [cp-patches] RFC: XMLEncoder and related infrastructure
Date: Thu, 05 Jan 2006 20:35:02 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; de-AT; rv:1.7.12) Gecko/20051208

Hi,
the big and evil XMLEncoder patch is finally ready for the public. :)

First the good news: It works and behaves in many ways like the JDK.

And the bad one: There is an evil problem with object references. These
happen when you write an object twice or more to the stream. It is fine if
you do this explicitly, eg.

        o = new Object();
        encoder.writeObject(o);
        encoder.writeObject(o);

But when it happens as part of the encoding process:
        o = new Object();
        map = new HashMap();
        map.put("bla", o);

        encoder.writeObject(o);
        encoder.writeObject(map);

Then the object reference wont show up.

I know this is evil and should be fixed. But this isnt as easy as it sound
because the reason the object does not show up as a reference is because the
encoder thinks it has been processed already. But if you change the code that
controls this you will run into and endless recursion.

I explain this in a bug report later and then I hope I wake up one morning and
have the brilliant idea to fix this ... or someone else. :)

Here is the ChangeLog:

2006-01-05  Robert Schuster  <address@hidden>

        * java/beans/Statement.java: Doc fixes.
        (doExecute): Workaround for Class.forName call.
        (toString): Made output look more like on the JDK.
        * java/beans/Expression.java: Doc fixes.
        (toString): Made output look more like on the JDK.
        * java/beans/PersistenceDelegate.java,
        java/beans/DefaultPersistenceDelegate.java,
        java/beans/Encoder.java,
        java/beans/XMLEncoder.java: New file.
        * gnu/java/beans/encoder/ArrayPersistenceDelegate.java,
        gnu/java/beans/encoder/ClassPersistenceDelegate.java,
        gnu/java/beans/encoder/CollectionPersistenceDelegate.java,
        gnu/java/beans/encoder/Context.java,
        gnu/java/beans/encoder/GenericScannerState.java,
        gnu/java/beans/encoder/IgnoringScannerState.java,
        gnu/java/beans/encoder/MapPersistenceDelegate.java,
        gnu/java/beans/encoder/ObjectId.java,
        gnu/java/beans/encoder/PrimitivePersistenceDelegate.java,
        gnu/java/beans/encoder/ReportingScannerState.java,
        gnu/java/beans/encoder/Root.java,
        gnu/java/beans/encoder/ScanEngine.java,
        gnu/java/beans/encoder/ScannerState.java,
        gnu/java/beans/encoder/StAXWriter.java,
        gnu/java/beans/encoder/Writer.java: New file.
        * gnu/java/beans/encoder/elements/Array_Get.java,
        gnu/java/beans/encoder/elements/Element.java,
        gnu/java/beans/encoder/elements/List_Set.java,
        gnu/java/beans/encoder/elements/Array_Set.java,
        gnu/java/beans/encoder/elements/NullObject.java,
        gnu/java/beans/encoder/elements/StaticMethodInvocation.java,
        gnu/java/beans/encoder/elements/StaticFieldAccess.java,
        gnu/java/beans/encoder/elements/StringReference.java,
        gnu/java/beans/encoder/elements/ClassResolution.java,
        gnu/java/beans/encoder/elements/ArrayInstantiation.java,
        gnu/java/beans/encoder/elements/PrimitiveInstantiation.java,
        gnu/java/beans/encoder/elements/ObjectReference.java,
        gnu/java/beans/encoder/elements/ObjectInstantiation.java,
        gnu/java/beans/encoder/elements/List_Get.java,
        gnu/java/beans/encoder/elements/MethodInvocation.java: New file.

The patch is 189kB in plain text, thats why it is compressed. :)

cya
Robert

Attachment: beans-xmlencoder.diff.tar.gz
Description: GNU Zip compressed data

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]