Can you please create a Jira issue and attach all relevant files to it, so that 
I will be able to replay your problem ? 

Thanks
Werner

> -----Ursprüngliche Nachricht-----
> Von: Andy Buckley [mailto:[EMAIL PROTECTED]
> Gesendet: Mittwoch, 11. April 2007 12:02
> An: [email protected]
> Betreff: Re: AW: [castor-user] What method gets called to add elements to
> a collection?
> 
> Werner Guttmann wrote:
> > Andy, please see inline ...
> 
> Thanks for the help - it isn't working yet, though!
> 
> >> just want to know why my Castor mapping for an XML structure like this:
> >>
> >> <paper>
> >>   <dataset datasetId="1">...</dataset>
> >>   <dataset datasetId="2">...</dataset>
> >>   ...
> >> </paper>
> >>
> >> doesn't seem to call the Paper.setDatasets(...) or
> Paper.addDataset(...)
> >> methods during unmarshalling? How *is* the paper's collection of
> datasets
> >> getting populated?
> >
> > Basically, unless you provide an addMethod in the mapping file, Castor
> XMl
> > - for collection types - will by default use the getter method to obtain
> a
> > reference to the collection and call the add() (for e.g. list and set
> > types) method on the collection itself.
> 
> Ah - I didn't realise that that was the meaning of the first sentence of
> the
> "exceptions concerning collection fields" section here:
> http://www.castor.org/xml-mapping.html#3.4-The-<field>-element . I guess
> that
> when you say "provide an addMethod", you mean that I should define the
> set-method attribute, and rely on the auto-detection of the add method as
> described on that web page?
> 
> For definiteness, here's my mapping for the Datasets field in the Paper
> class:
> 
> <field name="Datasets" type="cedar.hepdata.model.Dataset"
> collection="sortedset" set-method="setDatasets">
>   <bind-xml name="dataset" node="element"/>
> </field>
> 
> I suspected that the problem was that my set method was defined with the
> signature
> 
> public Paper setDatasets(SortedSet<Dataset> datasets)
> 
> i.e. a return type of Paper rather than void (it returns "this" so that
> add and
> set methods can be chained). I tried changing this, though, and it made no
> difference: is the return type *actually* checked? Anyway, here are the
> new set
> and add methods defined in the Paper class:
> 
> public void setDatasets(SortedSet<Dataset> datasets) {
>     System.out.println("Setting datasets");
>     this.datasets.clear();
>     for (Dataset d : datasets) addDataset(d);
> }
> 
> public void addDataset(Dataset dataset) {
>     System.out.println("Adding a dataset");
>     ...
>     dataset.setPaper(this);
>     this.getDatasets().add(dataset);
> }
> 
> (I also removed the setDatasets(Collection<Dataset>) and similar methods,
> to
> make sure there's no source of confusion.)
> 
> As far as I can tell, these should definitely get called when the mapping
> above
> is used. But when the set-method attribute is added, I don't see either of
> the
> printouts from these methods during unmarshalling, and the datasets
> collection
> ends up empty. If I try changing the value of set-method to something
> non-existent an exception occurs, so it looks like Castor is finding the
> methods but then not calling them. Help!!!
> 
> Thanks again,
> Andy
> 
> --
> Andy Buckley: CEDAR @ IPPP, Durham
> Work: www.cedar.ac.uk
> www.insectnation.org
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list please visit:
> 
>     http://xircles.codehaus.org/manage_email


---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email

Reply via email to