# JAXB (2.0) - IllegalAnnotationsException?



## Herr_M (26. Juli 2010)

Hi ich versuche gerade mit JAXB einen Parser für XML zu schreiben 
um die Daten aus dem XML File auszulesen.

Beim Versuch den Parser laufen zu lassen stoße ich aber auf folgende Exception, die
ich nicht verstehe (bevor jemand fragt, ich verstehe schon was mir die Exception zu sagen versucht, nämlich das ich hier was zweimal definiert haben soll, aber ich wüßte nicht was doppelt is...)

Hier mal die Struktur meines XML Dokuments, die meisten Unterelemente von <artcile> hab ich mal aus Gründen der Platzersparnis weggelassen, da diese denke ich eh für das Problem nicht relevant sind.


```
<?xml version="1.0" encoding="UTF-8"?>
<articles hits="1">
	<article>
		<id>684543</id>
...
	</article>
</articles>
```

Hier die Java Klasse für JAXB mit den Annotations

```
package de.avs.marktjagd.client.parser.elements;

import java.util.ArrayList;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "articles")
public class Articles {

   @XmlElementWrapper(name = "listArticles")
   //bla
   @XmlElement(name = "article")
   private ArrayList<Article> listArticles;
   
   public ArrayList<Article> getListArticles() {
      return listArticles;
   }
   
   public void setListArticles(ArrayList<Article> listArticles) {
      this.listArticles = listArticles;
   }   
}
```

Und hier die Stacktrace zu dem ganzen:


```
Message:		1 counts of IllegalAnnotationExceptions
Location:	de.anycompany..client.parser.Parser.getAllArticles(Parser.java:66)
Thrown:
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
Class has two properties of the same name "listArticles"
	this problem is related to the following location:
		at public java.util.ArrayList de.anycompany..client.parser.elements.Articles.getListArticles()
		at de.anycompany..client.parser.elements.Articles
	this problem is related to the following location:
		at private java.util.ArrayList de.anycompany..client.parser.elements.Articles.listArticles
		at de.anycompany..client.parser.elements.Articles

	at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:66)
	at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:422)
	at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:270)
	at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:103)
	at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:81)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:202)
	at javax.xml.bind.ContextFinder.find(ContextFinder.java:376)
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
	at de.anycompany..client.parser.Parser.getAllArticles(Parser.java:43)
	at de.anycompany..client.RestWS.execute(RestWS.java:156)
	at de.anycompany..client.test.TestEnhanced.main(TestEnhanced.java:30)
```

Für die Implementierung hab ich mich an folgenden Tutorials/Beispielen orientiert
http://www.vogella.de/articles/JavaXML/ar01s04.html
http://blogs.sun.com/CoreJavaTechTips/entry/exchanging_data_with_xml_and

Ich hab jetzt schon mehrfach gekuckt ob ich in der Bennenung der Elemente etc vielleicht was im Tutorial übersehn hab und daher mein Fehler wegen des doppelten Namens kommt aber ich kann keinen Fehler finden, sieht alles aus wie in dem Tutorial 
mal agbesehen davon, dass es in meiner Implementierung nicht um Bücher oder Geburtstage geht sondern um Artikel... aber daran kanns ja wohl echt nicht liegen


----------



## Herr_M (27. Juli 2010)

Hat sich erledigt, da <articles> hier gleichzeitig das documentRoot ist und nicht nur ein Wrapper rund um <article> muss meine Klasse zum parsen einfach so aussehen


```
@XmlRootElement(name = "articles")
public class Articles {

   @XmlElement(name = "article")
   private ArrayList<Article> article;

   public ArrayList<Article> getArticles() {
      return article;
   }

   public void setArticles(ArrayList<Article> articles) {
      this.article = articles;
   }

}
```


----------

