I'm trying to work through a simple use case for Castor and I'm getting the
following error. What I'm trying to do is read in an XML file with a list
of objects.
Exception in thread "main" org.exolab.castor.xml.MarshalException: The class
for the root element 'array-list' could not be found.{File: [not available];
line: 2; column: 13}
My simple entity looks like the following.
public class Pet implements Serializable {
private String Name;
private String Type;
public void setName(String name) {
Name = name;
}
public String getName() {
return Name;
}
public void setType(String type) {
this.Type = type;
}
public String getType() {
return Type;
}
}
My mapping file looks like this.
<mapping>
<class name="com.zandroid.model.Pet" auto-complete="true">
<map-to xml="pet"/>
<field name="name" type="string">
<bind-xml name="name" node="element"/>
</field>
<field name="type" type="string">
<bind-xml name="type" node="element"/>
</field>
</class>
</mapping>
In my main class I have the follow code.
public static void main(String[] args) throws IOException,
MappingException, MarshalException, ValidationException {
List<Pet> arrayList = new ArrayList<Pet>();
Pet pet = new Pet();
pet.setName("Zoe");
pet.setType("Dog");
arrayList.add(pet);
Pet pet1 = new Pet();
pet1.setName("Gary");
pet1.setType("Cat");
arrayList.add(pet1);
Writer fileWriter = new FileWriter("text.xml");
Mapping mapping = new Mapping();
mapping.loadMapping("mapping.xml");
XMLContext context = new XMLContext();
context.addMapping(mapping);
Marshaller marshaller = context.createMarshaller();
marshaller.setWriter(fileWriter);
marshaller.marshal(arrayList);
context.createUnmarshaller().setClass(ArrayList.class);
FileReader reader = new FileReader("text.xml");
ArrayList<Pet> pets =
(ArrayList<Pet>)context.createUnmarshaller().unmarshal(reader);
for (Pet pet2 : pets) {
System.out.println(pet2.getName());
}
}
This code creates the following xml file.
<array-list>
<pet><name>Zoe</name><type>Dog</type></pet>
<pet><name>Gary</name><type>Cat</type></pet>
</array-list>
So when I go Unmarshaller the XML file I get the The class for the root
element 'array-list'.
1. Should I be doing something different in my mapping file?
2. Should I create another class that has a property of List<Pet>?
3. Is this the correct use case for Castor?
Note: I'm also trying to get this to work in Spring 3. Also I have review
this article http://www.castor.org/how-to-map-a-list-at-root.html
Thanks for the help.
--
Zachariah Young
http://zachariahyoung.com