Hi,
please change all List declarations such as
> private List<Resource> resource;
to
> private List<Resource> resource = new ArrayList<Resource>();
so that all collections are initialized properly.
Cheers
Werner
On 17.12.2009 00:45, patrickh wrote:
>
> Thank you for the reply.
> Here are java classes(I removed irrelevant fields and methods)
> public class Resources {
> private List<Resource> resource;
>
> public Resources(List<Resource> resourceList) {
> this.resource = resourceList;
> }
>
> public Resources(){
> super();
> }
>
> public List<Resource> getResource() {
> return resource;
> }
>
> public void setResource(List<Resource> resource) {
> this.resource = resource;
> }
> }
>
> public class Resource {
> private List<String> fileNames;
> private List<File> files;
>
> /**
> * Convenient method to conver files into String
> * @param files
> * @return
> */
> private List<String> convertFileNames(List<File> files){
> List<String> names = new ArrayList<String>();
> if(files == null){
> return names;
> }
> for(File file : files){
> names.add(file.getAbsoluteFile());
> }
> return names;
> }
> //
> -------------------------------------------------------------------------
> // Mutator Methods
> //
> -------------------------------------------------------------------------
> public String getFileNames() {
> if(fileNames != null){
> return fileNames;
> }
> else{
> return convertFileNames(files);
> }
> }
> public void setFileNames(String fileNames) {
> this.fileNames = fileNames;
> }
> public void setFiles(List<File> files) {
> this.files = files;
> setFileNames(convertFileNames(files));
> }
> }
>
> I don't initialize the outer List Resources.resource. If I remove the inner
> Resource.fileNames, it works. So I would've thought it does not require
> initialization? And from some examples I googled, they don't initialize List
> either. But none of them uses nested collection tho...
>
> Thanks and regards,
>
> Patrick
>
>
> Werner Guttmann-6 wrote:
>>
>> Hi,
>>
>> to give you a precise answer, you'd need to show us the Java code as well.
>>
>> Still, within your Resources/Resource classes, do you initialize the
>> lists of resource/fileNames members upon object construction ?
>>
>> I.e. how do you declare the property fielNames in class Resource ?
>>
>> private List<String> filenames;
>>
>> or
>>
>> private List<String> filenames = new ArrayList<String>();
>>
>> Cheers
>> Werner
>>
>> On 16.12.2009 00:34, patrickh wrote:
>>>
>>> Hi,
>>>
>>> I am trying to unmarshall a xml which is produced by castor.
>>> I tried both having and not having mapping files and it all failed to
>>> unmarshal.
>>> Here is the xml:
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <resources>
>>> <resource>
>>> <resource-file>fake address 1</resource-file>
>>> <description-name>spiderman</description-name>
>>> <time-of-creation>2009-10-10</time-of-creation>
>>> <owner>huangp</owner>
>>> <comment>good one</comment>
>>> <category>category 1</category>
>>> <size>1g</size>
>>> <file-names>spiderman1.rmvb</file-names>
>>> <file-names>spiderman2.rmvb</file-names>
>>> </resource>
>>> <resource>
>>> <resource-file>fake address 2</resource-file>
>>> <description-name>superman</description-name>
>>> <time-of-creation>2009-10-11</time-of-creation>
>>> <owner>huangp</owner>
>>> <comment>bad one</comment>
>>> <category>category 1</category>
>>> <size>200m</size>
>>> <file-names>superman a.rmvb</file-names>
>>> <file-names>superman b.rmvb</file-names>
>>> </resource>
>>> </resources>
>>>
>>> Here is the mapping:
>>> <class name="huangp.domain.Resource">
>>> <map-to xml="resource" />
>>> <field name="resourceFile" type="string" />
>>> <field name="descriptionName" type="string" />
>>> <field name="timeOfCreation" type="string" />
>>> <field name="owner" type="string" />
>>> <field name="comment" type="string" />
>>> <field name="category" type="string" />
>>> <field name="size" type="string" />
>>> <field name="fileNames" type="string" collection="arraylist">
>>> <bind-xml name="file-names" />
>>> </field>
>>> </class>
>>>
>>> <!-- mapping for class 'huangp.domain.Resources' -->
>>> <class name="huangp.domain.Resources">
>>> <field name="resource" type="huangp.domain.Resource"
>>> collection="arraylist">
>>> <bind-xml name="resource" />
>>> </field>
>>> </class>
>>>
>>> Exception trace:
>>> org.exolab.castor.xml.MarshalException: Nested error:
>>> java.lang.NullPointerException{File: [not available]; line: 11; column:
>>> 43}
>>>
>>> Resources class only have one field which is a List<Resource>. Resource
>>> class has detailed fields and it contains another List<String> fileNames.
>>> I
>>> suspect it is to do with this nested list? Can anyone please help? BTW I
>>> can't access castor site since yesterday...
>>>
>>> Big thank you.
>>>
>>
>> ---------------------------------------------------------------------
>> 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