XStream arrayList to and from XML
arraylist, java, xml, xstream
Solution
You forgot to add
XStream xstream = new XStream();
xstream.alias("elbow", Elbow.class);
xstream.alias("elbows", ElbowList.class);
xstream.addImplicitCollection(ElbowList.class, "elbows", Elbow.class);
too, when loading.
Problem
I do not know where the problem is at the moment. First time using xml, and I got some problems with putting ArrayList in xml file and taking it from it. I was found this and I tried to do it same way: How to convert List of Object to XML doc using XStream but unfortunately I failed. Here what I have so far: Class that holds ArrayList: ``` public class ElbowList{ private ArrayList<Elbow> elbows = new ArrayList<>(); public ElbowList(){ elbows = new ArrayList<Elbow>(); } public void setElbows(ArrayList<Elbow> elbows){ this.elbows.clear(); this.elbows = elbows; } public ArrayList<Elbow> getElbows() { return elbows; } public void add(Elbow elbow){ elbows.add(elbow); } } ``` Save to XML: ``` MainFrame mainFrame = (MainFrame) SwingUtilities.getWindowAncestor(SetupPanel.this); ElbowList elbowList = (ElbowList) mainFrame.getObjects().get(2); //get ElbowList object XStream xstream = new XStream(); xstream.alias("elbow", Elbow.class); xstream.alias("elbows", ElbowList.class); xstream.addImplicitCollection(ElbowList.class, "elbows", Elbow.class); String xml = xstream.toXML(elbowList.getElbows()); System.out.println(xml); try { PrintWriter out = new PrintWriter("Save.xml"); out.println(xml); out.close(); } catch (FileNotFoundException ex) { Logger.getLogger(SetupPanel.class.getName()).log(Level.SEVERE, null, ex); } ``` And that one above actually seems to work correctly. Load XML file, there is where I got an exception call: ``` try { XStream xstream = new XStream(); FileReader reader = new FileReader("Save.xml"); MainFrame mainFrame = (MainFrame) SwingUtilities.getWindowAncestor(SetupPanel.this); ElbowList elbowList = (ElbowList) mainFrame.getObjects().get(2); elbowList.setElbows((ArrayList<Elbow>) xstream.fromXML(reader));//exception occurs here SpacePanel spacePanel = (SpacePanel) mainFrame.getObjects().get(1); spacePanel.repaint(); } catch (IOException ex) { Logger.getLogger(SetupPanel.class.getName()).log(Level.SEVERE, null, ex); } ``` An exception I get: ``` Exception in thread "AWT-EventQueue-0" com.thoughtworks.xstream.converters.ConversionException: elbow : elbow ---- Debugging information ---- message : elbow cause-exception : com.thoughtworks.xstream.mapper.CannotResolveClassException cause-message : elbow class : java.util.ArrayList required-type : java.util.ArrayList converter-type : com.thoughtworks.xstream.converters.collections.CollectionConverter path : /list/elbow line number : 2 version : 1.4.7 ------------------------------- at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79) at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79) at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65) at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134) at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1185) at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1169) at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1040) at view.SetupPanel$2.actionPerformed(SetupPanel.java:78) (...) ``` I dont get why there is an conversion exception, for me everything seems right if it comes to this line when exception occurs. I have no more ideas whats wrong, please help.