{"id":102,"date":"2015-04-30T22:28:52","date_gmt":"2015-04-30T22:28:52","guid":{"rendered":"http:\/\/devblog.cssec.de\/?p=102"},"modified":"2018-11-13T22:31:46","modified_gmt":"2018-11-13T22:31:46","slug":"rest-services-mit-jersey-jaxb-internal-server-error-500","status":"publish","type":"post","link":"https:\/\/www.cssec.de\/blog\/2015\/04\/30\/rest-services-mit-jersey-jaxb-internal-server-error-500\/","title":{"rendered":"Rest-Services mit Jersey &#8211; JAXB Internal Server Error 500"},"content":{"rendered":"<p>F\u00fcr den neuen Webshop ben\u00f6tige ich als Schnittstelle zum ERP einen REST-Webservice.<br \/>\nDa die Daten relativ umfangreich sind, sollen Sie als XML exportiert werden.<\/p>\n<p>Es gibt ja ziemlich gute Tutorials im Web, z.B. auch bei Vogella:<\/p>\n<p><a href=\"http:\/\/www.vogella.com\/tutorials\/REST\/article.html\">http:\/\/www.vogella.com\/tutorials\/REST\/article.html<\/a><\/p>\n<p>F\u00fcr die einfachsten Sachen, z.B. die R\u00fcckgabe als String hat das soweit funktioniert. Als ich mich jedoch daran gemacht habe, JAXB zu nutzen, fingen die Probleme an.<\/p>\n<p>Immer und immer wieder habe ich einen Internal Server Error 500 von Tomcat \/ Winstone erhalten.<br \/>\nWarum? &#8211; Keine Ahnung.<\/p>\n<p>Leider hat der Tomcat einfach mal komplett gar nix ausgegeben.<\/p>\n<p>Nach langer Suche im Web und in Foren, kam ich auf einen Hinweis mit dem @XMLAttribute-Tag.<\/p>\n<p>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\u00f6tzlich kam der Output zur\u00fcck. Bl\u00f6d nur, dass ich verschiedene Felder der Klasse als Attribut und nicht als Feld definieren wollte.<\/p>\n<p>Schritt f\u00fcr Schritt habe ich versucht wieder die Attribute einzubauen, aber man bekam wiederum nur einen HTTP 500 ohne irgendeine Fehlermeldung.<\/p>\n<p>Hm &#8211; wird wohl irgendwie JAXB daran Schuld sein. OK &#8211; daraufhin habe ich die Klasse einfach mal direkt mit JAXB gemarshalled und &#8211; Wunder oh Wunder &#8211; er zeigte mir verschiedene Exceptions bzw. Fehler an.<\/p>\n<p>Die ganze Problematik dabei war eigentlich folgende:<\/p>\n<p>JAXB erwartet pro Feld <strong>ENTWEDER<\/strong> einen Getter <strong>ODER<\/strong> eine Annotation.<\/p>\n<p>Da ich aber Pojo-Like nat\u00fcrlich getter und setter aus Eclipse generiert habe, sind sich die Sachen in die Quere gekommen.<\/p>\n<p>ALSO MERKE:<\/p>\n<p>JAXB-Klassen d\u00fcrfen entweder Annotations an den Feldern haben und keine Getter, oder aber GETTER und keine Annotations.<\/p>\n<p>Ohne Annotations (also mit Gettern) wird das Feld zum XMLElement, mit Annotations kann es entweder XmlElement oder XmlAttribut werden.<\/p>\n<p>Also merken!!<\/p>\n<p>&nbsp;<\/p>\n<p>NACHTRAG 5.11.2015:<\/p>\n<p>Nach einiger Recherche gibt es noch eine andere M\u00f6glichkeit, trotz getter die Fields zu nutzen.<\/p>\n<p>Dazu einfach die Annotation:<br \/>\n@XmlAccessorType(XmlAccessType.FIELD) setzen, dann nutzt JAXB ausschlie\u00dflich die Fields statt die entsprechenden Properties<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr den neuen Webshop ben\u00f6tige 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.com\/tutorials\/REST\/article.html F\u00fcr die einfachsten Sachen, z.B. die R\u00fcckgabe als String hat das soweit funktioniert. Als ich mich jedoch daran [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/102"}],"collection":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/comments?post=102"}],"version-history":[{"count":1,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/102\/revisions"}],"predecessor-version":[{"id":103,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/102\/revisions\/103"}],"wp:attachment":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/media?parent=102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/categories?post=102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/tags?post=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}