Thanks for the replies, the information provided was very useful. The
problem I had (implemented some work arounds) was the fact that the get
method would return a Collections.umodifiableList() so the caller could
not edit the internal list without calling set or add (of Castor did not
like this). Also, every time add or set is called I execute some other
steps to verify the data being add or set is valid. So, Castor bypassing
my sets causes some issues with the object being put into an invalid
state. 

Again thanks for the help
J

-----Original Message-----
From: Stephen Bash [mailto:[EMAIL PROTECTED] 
Sent: Thursday, March 09, 2006 11:52 AM
To: [email protected]
Subject: Re: [castor-user] set-method

Keith-

First, thanks for the backup on this one.  Second, for my own
information, where does this code reside?  Is it in the
UnmarshalHandler, ClassDescriptor, or somewhere else?  I looked
through the J2CollectionHandlers class and did a few usage searches
for the CollectionHandler class, but didn't find the guts of the
logic.  Any hints you can provide would be appreciated...  It's a
large codebase to be sifting through sometimes :)

Thanks again,
Stephen


On 3/9/06, Keith Visco <[EMAIL PROTECTED]> wrote:
> Stephen is pretty much correct here. The set-method attribute is used
on
> the first item, if the getter returns null. Castor will instantiate a
> new collection and add it using the set-method. It will then use the
> getter on subsequent items. The set-method attribute can also be used
to
> specify a method which takes one object and adds it to the collection
> (an "add method") as Stephen mentioned.
>
> We may also at some point provide a configuration for having Castor
> manage the collection and only call the setter once the collection is
full.
>
> --Keith
>
> Stephen Bash wrote:
> > Jason-
> >
> > I looked through some of the in-code comments last night, so I can
> > attempt to answer your question.  I think the fundamental issue here
> > is Castor is based on SAX parsing which is event based, and as such
> > when parsing
> XML from (for example) an ArrayList, each element is
> > treated completely independently of all the others.  So when it is
> > time to add an object to an ArrayList it is easiest for the
framework
> > to simply call get to retrieve the current list and add to it.  This
> > requires minimal knowledge of the state of the list, and avoids
Castor
> > having to keep extra objects in memory while it "builds" the
ArrayList
> > object.  I'm not saying this is the best way to go, but that's the
> > impression I get from reading some of the comments.  I think all the
> > Collections API classes are handled this way.  An alternative is if
> > you supply an add method, i.e. addFoo( Foo foo ), I think Castor can
> > use that to add to a list rather than getting the list (you might
have
> > to specify it as the set-method in the mapping file).
> >
> > Sorry I can't provide a more satisfactory answer.  Let us know if
you
> > have further questions.
> >
> > Stephen
> >
> >
> > On 3/8/06, Jason Wood <[EMAIL PROTECTED]> wrote:
> >
> >>How can calling get instead of set be a 1.5 feature? The generics
are
> >>1.5 but how come Castor is not using the set methods? Why call get
over
> >>and over again to add elements to the collection? This does not make
> >>sense and makes adding the attribute set-method useless.
> >>
> >>-----Original Message-----
> >>From: Bill Leng [mailto:[EMAIL PROTECTED]
> >>Sent: Wednesday, March 08, 2006 2:55 PM
> >>To: [email protected]
> >>Subject: Re: [castor-user] set-method
> >>
> >>that is jdk1.5 feature and castor does not use jdk1.5 yet, I guess.
> >>
> >>Jason Wood wrote:
> >>
> >>>Wondering what's the purpose of set-method attribute if the
framework
> >>>calls getNames() to set the names member variable?
> >>>
> >>>
> >>>
> >>>So if I have ...
> >>>
> >>>
> >>>
> >>>Class myClass {
> >>>
> >>>  private ArrayList names;
> >>>
> >>>
> >>>
> >>>  public void setNames(ArrayList<String> names) {}
> >>>
> >>>  public ArrayList<String> getNames() {}
> >>>
> >>>}
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>How come Castor calls getNames() for each name it needs to add? Why
> >>
> >>not
> >>
> >>>Create and ArrayList<String> and call setName()?
> >>>
> >>>
> >>>
> >>>J
> >>>
> >>>
> >>>
> >>>
> >>>
> >>
> >>-------------------------------------------------
> >>If you wish to unsubscribe from this list, please
> >>send an empty message to the following address:
> >>
> >>[EMAIL PROTECTED]
> >>-------------------------------------------------
> >>
> >>
> >>-------------------------------------------------
> >>If you wish to unsubscribe from this list, please
> >>send an empty message to the following address:
> >>
> >>[EMAIL PROTECTED]
> >>-------------------------------------------------
> >>
> >>
> >
> >
> >
>
>
> -------------------------------------------------
> If you wish to unsubscribe from this list, please
> send an empty message to the following address:
>
> [EMAIL PROTECTED]
> -------------------------------------------------
>
>

-------------------------------------------------
If you wish to unsubscribe from this list, please
send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------

Reply via email to