# JAXBException beim Marshaller



## delphiking1980 (16. Jul 2011)

Hallo,

ich habe da mal eine Frage , ich bekomme immer eine Exception wenn ich mein Object an den Marshaller übergebe.

[XML]
<?xml version="1.0" encoding="UTF-8"?>
<bookmark>
<list>hallo</list>
<list>welt</list>
</bookmark>
[/XML]


```
public static void writeObjectToXMLFile(Object o, Class c, File file) {

		try {
			JAXBContext jc = JAXBContext.newInstance(c);
			Marshaller marshaller = jc.createMarshaller();
			marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
			
			java.io.FileOutputStream fos = null;
			try {
				fos = new FileOutputStream(file);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
			
			marshaller.marshal((List) o, fos);
		} catch (JAXBException e) {
			e.printStackTrace();
		}

	}
```


```
javax.xml.bind.JAXBException: class java.util.ArrayList nor any of its super class is known to this context.
	at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getBeanInfo(Unknown Source)
	at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(Unknown Source)
	at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(Unknown Source)
	at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(Unknown Source)
	at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(Unknown Source)
	at de.sdsoft.menu.xml.mainMenuXML.XMLHandler.writeObjectToXMLFile(XMLHandler.java:54)
	at de.sdsoft.menu.xml.mainMenuXML.XMLHandler.writeObjectToXMLFile(XMLHandler.java:62)
```


----------



## Noctarius (16. Jul 2011)

Ich kenn den Fehler nicht aber ich würde schätzen, dass das Problem darin besteht, dass du den Context nur mit der Class aufbaust. Hast du statt der Class mal das Package (als String) versucht?


----------



## gman (16. Jul 2011)

[JAVA=15] marshaller.marshal((List) o, fos);[/code]

Hier liegt dein Fehler. Du musst hier nicht auf List casten sondern auf die Klasse welche
die XML-Binding-Annotationen enthält. Wenn du mit Jaxb arbeitest müsstest du die
ja haben (entweder aus .xsd erstellt oder von Hand).


----------



## eRaaaa (16. Jul 2011)

Ich würde fast vermuten dass es daran liegt, dass er versucht direkt die ArrayList zu marshallen (aber als Class eine andere angibt, aber auch wenn würde es wohl nicht gehen)

```
@XmlRootElement
class Bookmark{

	private List<String> list;

	/**
	 * @return the list
	 */
	public List<String> getList() {
		return list;
	}

	/**
	 * @param list the list to set
	 */
	public void setList(List<String> list) {
		this.list = list;
	}

}
```


```
public static void main(String[] args) throws Exception {
		Bookmark bookmark = new Bookmark();
		bookmark.setList(Arrays.asList("Hallo","Welt"));
		writeObjectToXMLFile(bookmark, Bookmark.class, new File("demo.xml"));
	}
```

[xml]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<bookmark>
	<list>Hallo</list>
	<list>Welt</list>
</bookmark>
[/xml]


----------



## delphiking1980 (16. Jul 2011)

mein Fehler war wie schon erwartet mein falscher Cast.

Danke.


----------

