For more details I am adding here the class which is being unmarshalled, its
mapping file and how the unmarshaller is obtained. Please let me know if you
need anything else :

1. ScopeNode.java

public class ScopeNode extends GenericNode {
        
        private List<UserNode> users;
        private List<GroupNode> groups;
        private List<RoleNode> roles;
        private List<ContextNode> contexts;
        private transient int enabVirRes;
        public List<GroupNode> getGroups() {
                return groups;
        }
        public void setGroups(List<GroupNode> groups1) {
                this.groups = groups1;
        }

        public List<RoleNode> getRoles() {
                return roles;
        }

        public void setRoles(List<RoleNode> roles1) {
                this.roles = roles1;
        }

        public List<UserNode> getUsers() {
                return users;
        }
        public void setUsers(List<UserNode> users1) {
                this.users = users1;
        }
        public List<ContextNode> getContexts() {
                return contexts;
        }

        public void setContexts(List<ContextNode> contexts1) {
                this.contexts = contexts1;
        }
        public int getEnableVirtualResource() {
                return enabVirRes;
        }
        public void setEnableVirtualResource(int enabVirRes1) {
                this.enabVirRes = enabVirRes1;
        }
****************************************
2. scopenode-mapping.xml


<mapping>

        <include href="nvpair-mapping.xml"/>
        <include href="rule-mapping.xml"/>
        <include href="genericnode-mapping.xml"/>
        <include href="rolenode-mapping.xml"/>
        <include href="groupnode-mapping.xml"/>
        <include href="usernode-mapping.xml"/>
        <include href="contextnode-mapping.xml"/>
<class name="com.cisco.epm.pdp.cache.ScopeNode"
extends="com.cisco.epm.pdp.cache.GenericNode" >
        
                <map-to xml="ScopeNode"/>
                
                <field name="users" type="com.cisco.epm.pdp.cache.UserNode"
collection="arraylist">
                        <bind-xml name="users" node="element"/>
                </field>
                <field name="groups" type="com.cisco.epm.pdp.cache.GroupNode"
collection="arraylist">
                        <bind-xml name="groups" node="element"/>
                </field>
                <field name="roles" type="com.cisco.epm.pdp.cache.RoleNode"
collection="arraylist">
                        <bind-xml name="roles" node="element"/>
                </field>
                <field name="contexts" 
type="com.cisco.epm.pdp.cache.ContextNode"
collection="arraylist">
                        <bind-xml name="contexts" node="element"/>
                </field>
                <field name="enabVirRes" type="integer" transient="true"
get-method="getEnableVirtualResource" set-method="setEnableVirtualResource">
                        <bind-xml name="enabVirRes" node="element"/>
                </field>
        </class>
</mapping>

****************************************
3. Code snippet for getting unmarshaller:

XMLContext xmlContext = getXMLContext();
                Reader r = new BufferedReader(new InputStreamReader(is));
                Unmarshaller unmarshaller = xmlContext.createUnmarshaller();
                return unmarshaller.unmarshal(r);

XMLContext getXMLContext() throws Exception{
         try {
                        xmlContext = new XMLContext(); 
                        Mapping mapping = new Mapping();
                        mapping.loadMapping(inputSource);
                        xmlContext.addMapping(mapping);
                } catch (MappingException e) {
                        LOGGER.logError("Mapping of xml elements to class 
members failed", e);
                        throw e;
                } 
}

here the inputSource is a instance variable which is initialized with Input
Stream of the mapping file of this object.I also verified that there is no
autocomplete attribute used in my mapping files.
Also a strange thing is when I use these mapping files to be read as files
rather than as input source it is working.
But currently I am reading the mapping files as : 

               InputStream mappingResource =
getClass().getClassLoader().getResourceAsStream("scopenode-mapping.xml");
                inputSource = new InputSource(mappingResource);


Martin.Bolz wrote:
> 
> Hi,
> 
> thats strange even without a mapping file such a unmarshalling scenario
> works for me. Could you provide a little 
> bit more detail? As far as I know reflection is not involved if you use a
> mapping-file (assuming you not specified the 
> autocomplete feature in the mapping-file). Anyway could you also check
> your not using one of the static unmarshalling 
> methods? This is a common mistake as your mapping-file is ignored then in
> unmarshalling.
> 
> Regards, 
> 
> Martin
> 
> -----Ursprüngliche Nachricht-----
> Von: avner21J [mailto:[email protected]] 
> Gesendet: Montag, 21. Juni 2010 07:20
> An: [email protected]
> Betreff: [castor-user] org.exolab.castor.xml.MarshalException:Unable to
> instantiate java.util.List
> 
> 
> Hi,
> 
> I am using castor (ver 1.3.1) to unmarshal an xml into a java object.
> This object has member variables as collections (List).
> 
> Even though in the mapping file I used collections attribute of field tag
> and has set it to arraylist, it is still throwing this exception.
> 
> After doing a bit of research on this,I found that since UnmarshalHandler
> uses reflection to create object from xml, it is trying to invoke
> java.util.List.newInstance() which might be the root of the problem.
> 
> The class which I am trying to unmarshal is an already existing class and
> I
> cannot change the type of the member variables to ArrayList from List.
> 
> Exception Trace is below:
> 
> Caused by: java.lang.InstantiationException: java.util.List() method not
> found
> at 
> org.exolab.castor.xml.UnmarshalHandler.createInstance(UnmarshalHandler.java:2584)
> at 
> org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:2348)
> at 
> org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:1436)
> at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown 
> Source)
> at 
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown
> Source)
> 
> I am stuck with this. Please help me resolve this.
> -- 
> View this message in context:
> http://old.nabble.com/org.exolab.castor.xml.MarshalException%3AUnable-to-instantiate-java.util.List-tp28945150p28945150.html
> Sent from the Castor - User mailing list archive at Nabble.com.
> 
> 
> ---------------------------------------------------------------------
> 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
> 
> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/org.exolab.castor.xml.MarshalException%3AUnable-to-instantiate-java.util.List-tp28945150p28946559.html
Sent from the Castor - User mailing list archive at Nabble.com.


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

    http://xircles.codehaus.org/manage_email


Reply via email to