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

