Jörg, got it.. it works..thank you
i guess i was just looking for that "aha" moment... which your feedback
provided.

in the alias tutorial, even though it says "..make XStream read/write", it
never really set in that it was anything other than a marshall example.
An actual unmarshall method there (and in the other examples) would drive
home your point that alias() and addImplicitCollection() is applicable to
both serialize and deserialize.

your advice to first create the xml via xstream methods makes perfect sense
now.
i was able to find duplicate <persons> elements (class name and collection
name) and move forward quickly without the previous errors.

again, thanks






On Tue, May 20, 2014 at 10:17 AM, Jörg Schaible <joerg.schai...@gmx.de>wrote:

> Hi John,
>
> js wrote:
>
> > <Jörg>
> > Well, no. Not really. See, XStream is about Java object to XML *and
> back*,
> > i.e. every example can also unmarshal.
> >
> > Therefore adjust the marshalling. If XStream generates the required XML
> > format, it can also read it. It is a very tedious and annoying task to
> try
> > it the other way round (you already found this out), because you never
> > know - especially as starter - why XStream throws an exception or
> silently
> > skips some elements.
> > </Jörg>
> >
> > <me>
> > Typically, the use cases will be objects->xml for use by 3rd party or
> > xml->objects where inbound xml was created by a 3rd party. Unless i was
> > simply persisting and reading unmodified serialized data, i would expect
> > that the inbound and outbound xml is different and created/digested by
> > applications that may not even be java.
>
>
> Your expectation does not have any influence, how XStream works.
>
>
> > i created (marshalled/serialized) some test xml as follows:
> > Persons ps = new Persons();
> > Person p1 = new Person();
> > p1.setName("joe");
> >  s.getPersons().add(p1);
> > Person p2 = new Person();
> > p1.setName("blo");
> > ps.getPersons().add(p2);
> > System.out.println(xstream.toXML(ps));
> >
>
> > while i *try* to unmarshalled/deserialize as follows:
> > XStream xstream = new XStream(new StaxDriver());
> > stream.alias("persons", Persons.class);
> > xstream.alias("person", Person.class);
> > xstream.addImplicitCollection(Person.class, "person");
> > etc.
> >
> > These seems to be a very different set of methods.
>
>
> ??
>
> Sorry, but I don't understand your comment. With those methods you
> influence
> the XML format that is written *and* read.
>
> ================ %< ===================
> Persons ps = new Persons();
> Person p1 = new Person();
> p1.setName("joe");
> s.getPersons().add(p1);
> Person p2 = new Person();
> p1.setName("blo");
> ps.getPersons().add(p2);
>
> XStream xstream = new XStream(new StaxDriver());
> xstream.alias("persons", Persons.class);
> xstream.alias("person", Person.class);
> // next is useless, Person.class has no member person
> xstream.addImplicitCollection(Person.class, "person");
>
> String xml = xstream.toXML(ps);
> System.out.println(xml);
> assertEquals(ps, xtream.fromXML(xml));
> ================ %< ===================
>
> Will work (proper equals() implementations implied). It simply does not yet
> write XML in the format you'd like to read in the end.
>
> > My problem is that i
> > can't find adequate examples (or documentation) on how to use alias() and
> > addImplicitCollection() methods when unmarshalling collections.
>
> Again, there's no difference between marshalling and unmarshalling. The
> question is, which part of the tutorial do you not understand?
>
> http://xstream.codehaus.org/alias-tutorial.html
>
> - Jörg
>
> > </me>
> >
> > ---
> >
> > <Jörg>
> > Why do you think the objects have to be POJOs?
> > </Jörg>
> >
> > <me>
> > My xml needs to get deserialized into objects and then those objects used
> > by the application. Why not unmarshall directly into my existing POJOs
> > instead of having to create a whole new set of "command" (abstraction)
> > classes whose only difference is that their accessors/mutators are get(),
> > add() instead of the POJO standard get(), set()?
>
>
> XStream does not call any of the methods.
>
>
> > Things are much cleaner if i can (un)marshall using a simple library and
> > leave my domain unmodified (which is why i'm trying to avoid xstream
> > annotations).
>
>
> Personally, I don't use annotations either - for exactly the same reason.
> However, why do you think you cannot read/write into your domain model?
> That's what I normally do with XStream. Procedure is the same again: Write
> your domain model objects as XML and then start to tweak the output.
>
>
> > I questioned the requirement of get(), add() and collections as lists,
> > because that is whats used in the examples and i thought maybe they were
> > required.
>
>
> The generic (reflection-based) converters will look for declared members
> only. No methods or constructors required.
>
> Cheers,
> Jörg
>
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
>     http://xircles.codehaus.org/manage_email
>
>
>

Reply via email to