Rest-Services mit Jersey - JAXB Internal Server Error 500

Donnerstag, April 30, 2015 by crypti

Für den neuen Webshop benötige ich als Schnittstelle zum ERP einen REST-Webservice.
Da die Daten relativ umfangreich sind, sollen Sie als XML exportiert werden.

Es gibt ja ziemlich gute Tutorials im Web, z.B. auch bei Vogella:

http://www.vogella.c … ls/REST/article.html.

Für die einfachsten Sachen, z.B. die Rückgabe als String hat das soweit funktioniert. Als ich mich jedoch daran gemacht habe, JAXB zu nutzen, fingen die Probleme an.

Immer und immer wieder habe ich einen Internal Server Error 500 von Tomcat / Winstone erhalten.
Warum? - Keine Ahnung.

Leider hat der Tomcat einfach mal komplett gar nix ausgegeben.

Nach langer Suche im Web und in Foren, kam ich auf einen Hinweis mit dem @XMLAttribute-Tag.

Also habe ich mal eine noch einfachere Klasse erstellt und siehe da, es ging auch nicht. Bis ich alle Annotations aus der JAXB-Klasse (bis auf @XmlRootElement) entfernt habe. Plötzlich kam der Output zurück. Blöd nur, dass ich verschiedene Felder der Klasse als Attribut und nicht als Feld definieren wollte.

Schritt für Schritt habe ich versucht wieder die Attribute einzubauen, aber man bekam wiederum nur einen HTTP 500 ohne irgendeine Fehlermeldung.

Hm - wird wohl irgendwie JAXB daran Schuld sein. OK - daraufhin habe ich die Klasse einfach mal direkt mit JAXB gemarshalled und - Wunder oh Wunder - er zeigte mir verschiedene Exceptions bzw. Fehler an.

Die ganze Problematik dabei war eigentlich folgende:

JAXB erwartet pro Feld ENTWEDER einen Getter ODER eine Annotation.

Da ich aber Pojo-Like natürlich getter und setter aus Eclipse generiert habe, sind sich die Sachen in die Quere gekommen.

ALSO MERKE:

JAXB-Klassen dürfen entweder Annotations an den Feldern haben und keine Getter, oder aber GETTER und keine Annotations.

Ohne Annotations (also mit Gettern) wird das Feld zum XMLElement, mit Annotations kann es entweder XmlElement oder XmlAttribut werden.

Also merken!!