Apologies.  It's very late here and I've been looking at this for over
12 hours now.  I had tried to simplify the code and take out names
that only mean something to me and I noticed at the last second that
i'd missed a few.  I've corrected that in-situ below.  Please forgive
the multiple posts, even i'm annoyed at myself...

This should be correct now


* * * * * 

I have already posted a message "Mapping a List at root returns
AnyNode objects instead of desired mapped object" and tried another
tack only to be thwarted again unfortunately so I'm clearly doing
something quite daft.

I need to unmarshall a list of simple objects and this time I have
created a wrapper java class to hold the list.  But I can't seem to
get the mapping right.  (Hopefully it's a mistake that will help
another beginner at least)



Here is the XML I'd like to unmarshall:

    <search-publications-response item-count="2">
       <publication id="abc" />
       <publication id="def" />
    </search-publications-response>


Here are my java classes:

    public class SearchPubsResponse
    {
        private List pubs;
    
        public List getPublicationList()
        {
            return pubs;
        }
    
        public void setPublicationList(List pubsList)
        {
            this.pubs = pubsList;
        }
    }


    public class PublicationImage
    {
        private String articleId;

        public String getArticleId()
        {
            return articleId;
        }

        public void setArticleId(String articleId)
        {
            this.articleId = articleId;
        }    
    }


here is my mapping file (castor-mapping-pubs.xml):


    <mapping>
  
        <class name="qmul.qmrae.domain.SearchPubsResponse">
            <map-to xml="search-publications-response" />
            <field name="publicationList"
type="qmul.qmrae.domain.PublicationImage" collection="collection"
container="false">
                <bind-xml name="publication" />
            </field>
        </class>


        <class name="qmul.qmrae.domain.PublicationImage">
            <field name="articleId">
                <bind-xml name="id" node="attribute" />
            </field>
        </class>

    </mapping>



And here is the unmarshalling java:

    Unmarshaller unmarshaller = new Unmarshaller();

    Mapping map = new Mapping();
    map.loadMapping(getClass().getResource( "/castor-mapping-pubs.xml"
));
    unmarshaller.setMapping(map);

    List pubs = (ArrayList)
unmarshaller.unmarshal(fileReaderForMyXML);

    SearchPubsResponse searchPubsResponse = (SearchPubsResponse)
unmarshaller.unmarshal(fileReader);

    // this step returns null
    List pubs = searchPubsResponse.getPublicationList();



But in the logs I see the following when it gets to the unmarshalling
step:  org.exolab.castor.xml.UnmarshalHandler - unable to find
FieldDescriptor for 'publication' in ClassDescriptor of
search-publications-response - ignoring extra element.

And nothing is returned in the List

I expect what's causing this is at the root of my other problem but I
just can't seem to unpick this.  I've been following this example
(http://castor.org/xml-mapping.html#4.-Usage-Pattern) and it looks the
same to me :-s


Hope you can help,
Rachel


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

    http://xircles.codehaus.org/manage_email


Reply via email to