Thanks Keith, that worked perfectly the first time.

Castor has yet to fail me, I just couldn't figure that one out from the
documentation.
Thanks again for your detailed example.

David

> -----Original Message-----
> From: Keith Visco [mailto:[EMAIL PROTECTED]] 
> Sent: Thursday, April 04, 2002 8:21 PM
> To: [EMAIL PROTECTED]
> Subject: Re: [castor-dev] Castor XML: Set-method not called on Vectors
> 
> 
> 
> 
> David Sean Taylor wrote:
> > 
> > New to Castor mailing list, hope its appropriate to ask 
> these kinds of 
> > questions.
> > 
> > The set-method is never called for a vector node:
> > 
> > <mapping>
> >   <class name="org.apache.jetspeed.om.profile.psml.PsmlPortlets">
> >     <map-to xml="portlets"/>
> > ...
> >     <field name="references"
> >            type="org.apache.jetspeed.om.profile.psml.PsmlReference"
> >           set-method="setReferences"
> >        collection="vector">
> >       <bind-xml name="reference"/>
> >     </field>
> > 
> > If I don't specify 'set-method', Castor calls the default 
> get-method 
> > by name, and then sets adds each element to the vector itself.
> 
> This is the correct behavior...Castor obtains the vector and 
> adds the item to the vector. There is no need to call the set-method.
> 
> If you want more control over the vector...create an 
> add-method and specify this as the set-method instead.
> 
> > 
> > If I use the set-method as above, neither the set nor get is called.
> 
> If you specify only a set method you are disabling the get-method.
> 
> Specify both methods if you want both to be used. However, in 
> your above case, the set method will not get called unless it 
> represents a method that incrementally adds each item.
> 
> The fact that Castor never calls the set-method in your 
> example is a because it can't call the get-method to obtain 
> the vector, since you disabled the get-method by only 
> specifying a set-method.
> 
> It is a bug though that the Vector is not created and set 
> using the set method during the unmarshalling of each item.
> 
> We are making some internal changes to how we handle 
> collections, so hopefully this case will work in the future. 
> My plans are to keep a reference to the collection and add 
> each item and then make one set call at the end after the 
> collection is complete. Unless of course the user has 
> specified an incremental add method.
> 
> > 
> > The PsmlPortlets class has a method:
> > 
> >     public void setReferences(Vector refs)
> > 
> > Is there anyway to get my set-method called on a vector?
> 
> If the get-method returns null, the set-method should be 
> called once when it's created.
> 
> Other wise, you can create an add-method as such:
> 
> public void addReference(PsmlReference ref) {
>    refs.addElement(ref);
> }
> 
> Then modify your mapping as such:
> 
>   <field name="references"
>          type="org.apache.jetspeed.om.profile.psml.PsmlReference"
>          set-method="addReference"
>          get-method="getReferences"
>          collection="vector">
>          <bind-xml name="reference"/>
>   </field>
> 
> 
> --Keith
> 
> ----------------------------------------------------------- 
> If you wish to unsubscribe from this mailing, send mail to 
> [EMAIL PROTECTED] with a subject of:
>       unsubscribe castor-dev
> 
> 

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to