I have a problem using Castor, i use 0.9.6.
The problem arises, when i try to marshal a HashMap which contains a
LinkedList. But occurs for all other combinations, that I've tried.

What am I doing wrong?
I will appreciate your input on how to solve the problem.

The following program reproduces the error:

--------------------------------------------
package dk.acure.journal.test.castor;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.LinkedList;

import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;

public class Main {

    public static void main(String[] args) throws MarshalException,
ValidationException, IOException, MappingException {
        HashMap map = new HashMap();
        LinkedList list = new LinkedList();
        list.add("First element");
        list.add("Second element");
        map.put("key",list);
        ClassToSave object = new ClassToSave();
        object.setMap(map);
        String xml = getXMLFromData(object);
        ClassToSave objectAfter = getDataFromXML(xml);
    }

    private static  String getXMLFromData(ClassToSave data) throws
MarshalException, ValidationException, IOException, MappingException {
        StringWriter writer = new StringWriter();
        Marshaller marshaller = new Marshaller(writer);
        marshaller.marshal(data);
        String xml = writer.toString();
        return xml;
    }

    private static ClassToSave getDataFromXML(String xml) throws
MarshalException, ValidationException, IOException, MappingException {
        ClassToSave data = null;
        Unmarshaller unMarshaller = new Unmarshaller(ClassToSave.class);
        data = (ClassToSave) unMarshaller.unmarshal(new StringReader(xml));
        return data;
    }
}
----------------------------------------
package dk.acure.journal.test.castor;

import java.io.Serializable;
import java.util.HashMap;

public class ClassToSave implements Serializable {

    HashMap map;

    public ClassToSave() {
        super();
    }
    public HashMap getMap() {
        return map;
    }
    public void setMap(HashMap map) {
        this.map = map;
    }
}

------------------------------------------
Which produces the following stack-trace.
I have not used an mapping file in this example, but specifying a
mapping-file has not solved the problem.

element "value" occurs more than once. (parent class:
org.exolab.castor.mapping.MapItem)
 location: /map/map/value{file: [not available]; line: 2; column: 352}
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:671)
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:565)
        at dk.acure.journal.test.castor.Main.getDataFromXML(Main.java:51)
        at dk.acure.journal.test.castor.Main.main(Main.java:37)
Caused by: ValidationException: element "value" occurs more than once.
(parent class: org.exolab.castor.mapping.MapItem)
 location: /map/map/value
        at
org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:951)
        at
org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:1084)
        at org.apache.xerces.parsers.SAXParser.endElement(SAXParser.java:1398)
        at
org.apache.xerces.validators.common.XMLValidator.callEndElement(XMLValidator.java:837)
        at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:1200)
        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:380)
        at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:861)
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:657)
        ... 3 more
Caused by: ValidationException: element "value" occurs more than once.
(parent class: org.exolab.castor.mapping.MapItem)
 location: /map/map/value
        at
org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:951)
        at
org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:1084)
        at org.apache.xerces.parsers.SAXParser.endElement(SAXParser.java:1398)
        at
org.apache.xerces.validators.common.XMLValidator.callEndElement(XMLValidator.java:837)
        at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:1200)
        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:380)
        at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:861)
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:657)
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:565)
        at dk.acure.journal.test.castor.Main.getDataFromXML(Main.java:51)
        at dk.acure.journal.test.castor.Main.main(Main.java:37)
Caused by: ValidationException: element "value" occurs more than once.
(parent class: org.exolab.castor.mapping.MapItem)
 location: /map/map/value
        at
org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:951)
        at
org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:1084)
        at org.apache.xerces.parsers.SAXParser.endElement(SAXParser.java:1398)
        at
org.apache.xerces.validators.common.XMLValidator.callEndElement(XMLValidator.java:837)
        at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:1200)
        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:380)
        at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:861)
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:657)
        at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:565)
        at dk.acure.journal.test.castor.Main.getDataFromXML(Main.java:51)
        at dk.acure.journal.test.castor.Main.main(Main.java:37)
Exception in thread "main"

Reply via email to