Re: XML Serialization

From: John Martyniak (jmarty..x.netcom.com)
Date: Thu May 12 2005 - 16:01:56 EDT

  • Next message: Erik Hatcher: "Re: cayenne/src/regression/java/org/objectstyle/cayenne/regression AntFileSetCompareTask.java,NONE,1.1"

    Using velocity templates for XML conversion...An Interesting approach, not
    sure that is what designers had in mind :)

    Well I looked at Xstream a little more. And they have these things called
    converters, which help with the mapping, so it might be possible to write a
    couple of converters that will clean up the output of the Cayenne specific
    objects, in which case we could Xstream data output with out mapping at
    least as a starting point.

    But I think that would create pretty significant reliance Xstream in the
    Cayenne Main tree. It almost seems as if writing the converters would be
    better as a sub project of the Cayenne main project.

    Just some thoughts. I will keep looking at the converters, and see if there
    is any help there. Or if we can easily extend.

    -John

    On 5/12/05 2:05 PM, "Andrus Adamchik" <andru..bjectstyle.org> wrote:

    > Yeah, I am sure there will be something in Xstream to complain about :-) I
    > am working on an XML-heavy project right now and all existing tools that I
    > tried to date (I haven't checked Xstream) were a huge disapponitment.
    >
    > My major complaint was that all object-to-xml-and-back converters do not
    > allow *mapping*. So if you have a certain XML format you can only convert
    > it to some default type of objects. If your object tree strcutre is a bit
    > different, you are out of luck..
    >
    > For encoding I ended up using Velocity templates (yikes!), so I can treat
    > the output XML as unstructured data and only bind dynamic pieces. For
    > decoding I had to write manual parsers using DOM and XPath ... Not hapy
    > with either approach...
    >
    > Andrus
    >
    >
    >> Andrus,
    >>
    >> I just ran a couple of tests using the Xstream stuff, using some test
    >> examples I have been using with our XMLcoder and Decoder.
    >>
    >> Here is the code that I added to the cayenne-web-app example:
    >>
    >> XStream xstream = new XStream(new DomDriver()); // does not
    >> require
    >> XPP3 library
    >>
    >> xstream.alias("artist", Artist.class);
    >>
    >> String xml = xstream.toXML(artists);
    >>
    >> System.out.println(xml);
    >>
    >> And here is the resulting generated XML:
    >> <list>
    >> <artist serialization="custom">
    >> <org.objectstyle.cayenne.CayenneDataObject>
    >> <int>3</int>
    >> <org.objectstyle.cayenne.ObjectId>
    >> <objectIdKeys class="java.util.Collections-SingletonMap">
    >> <k class="string">ARTIST_ID</k>
    >> <v class="int">1</v>
    >> </objectIdKeys>
    >> <objectClass>webtest.Artist</objectClass>
    >> <hashCode>-26571346</hashCode>
    >> </org.objectstyle.cayenne.ObjectId>
    >> </org.objectstyle.cayenne.CayenneDataObject>
    >> </artist>
    >> <artist serialization="custom">
    >> <org.objectstyle.cayenne.CayenneDataObject>
    >> <int>3</int>
    >> <org.objectstyle.cayenne.ObjectId>
    >> <objectIdKeys class="java.util.Collections-SingletonMap">
    >> <k class="string">ARTIST_ID</k>
    >> <v class="int">3</v>
    >> </objectIdKeys>
    >> <objectClass>webtest.Artist</objectClass>
    >> <hashCode>-26571344</hashCode>
    >> </org.objectstyle.cayenne.ObjectId>
    >> </org.objectstyle.cayenne.CayenneDataObject>
    >> </artist>
    >> <artist serialization="custom">
    >> <org.objectstyle.cayenne.CayenneDataObject>
    >> <int>3</int>
    >> <org.objectstyle.cayenne.ObjectId>
    >> <objectIdKeys class="java.util.Collections-SingletonMap">
    >> <k class="string">ARTIST_ID</k>
    >> <v class="int">4</v>
    >> </objectIdKeys>
    >> <objectClass>webtest.Artist</objectClass>
    >> <hashCode>-26571343</hashCode>
    >> </org.objectstyle.cayenne.ObjectId>
    >> </org.objectstyle.cayenne.CayenneDataObject>
    >> </artist>
    >> <artist serialization="custom">
    >> <org.objectstyle.cayenne.CayenneDataObject>
    >> <int>3</int>
    >> <org.objectstyle.cayenne.ObjectId>
    >> <objectIdKeys class="java.util.Collections-SingletonMap">
    >> <k class="string">ARTIST_ID</k>
    >> <v class="int">2</v>
    >> </objectIdKeys>
    >> <objectClass>webtest.Artist</objectClass>
    >> <hashCode>-26571345</hashCode>
    >> </org.objectstyle.cayenne.ObjectId>
    >> </org.objectstyle.cayenne.CayenneDataObject>
    >> </artist>
    >> </list>
    >>
    >> One of the advantages of our method is that you can use a mapping file
    >> so you have complete control over the resulting XML and potentially it
    >> is a lot cleaner. I think that other thing is that you lose the name of
    >> the relationship and it will harder to parse.
    >>
    >> I will look into the Xstream stuff further.
    >>
    >> -John
    >>
    >>
    >>
    >> On 5/12/05 10:29 AM, "Andrus Adamchik" <andru..bjectstyle.org> wrote:
    >>
    >>>> Andrus just mentioned the XML serialization feature..how far along is
    >>>> this? I ask because I recently used XStream
    >>>> (http://xtstream.codehaus.org/) and found it fantastically easy to
    >>>> use and also very fast. Just an idea..
    >>>>
    >>>> Holger
    >>>
    >>> This was developed by Kevin Menard and AFAIK this is still pretty
    >>> unstable (http://objectstyle.org/confluence/display/CAY/2005/03/09/).
    >>>
    >>> I need to check out xtstream. If it happens to be something usable and
    >>> easy to integrate with Cayenne, my vote would be to kill our own
    >>> implementation.
    >>>
    >>> Andrus
    >>>
    >>>
    >>>
    >
    >
    >



    This archive was generated by hypermail 2.0.0 : Thu May 12 2005 - 16:02:01 EDT