Jackson + Glassfish 4.1.1

Vor kurzem hatten wir einen netten Beitrag zum Thema JSON-Parsen mit Jackson (Beitrag). Die dort verwendeten Beispiele wurden alle auf einem Wildfly zum laufen gebracht, schließlich wird Jackson als Standard JSON-Parser auf diesem Server verwendet. Aber wie sieht es denn mit dem Glassfish aus?

Der Glassfish 4 verwendet im Standard „Moxy“ als Parser für JSON. Jackson wird jedoch als Alternative mitgeliefert und so Bedarf es „eigentlich“ „nur“ einer Konfiguration um die Bibliothek zu aktivieren:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.15</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.10.4</version>
    <scope>provided</scope>
</dependency>

Und die Registrierung unserer Webservices:


import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;

@ApplicationPath("/rest")
public class JerseyApplicationResource extends ResourceConfig {

    public JerseyApplicationResource() {
        System.out.println("Register Jackson");
        super.register(JacksonFeature.class)
                .packages("de.gedoplan.showcase.resources");
    }

Theoretisch sind wir damit am Ende . Leider nur theoretisch. Auf dem aktuellen Glassfish 4.1.1 beglückt uns dieses Setup mit einer Fehlermeldung:

java.lang.ClassNotFoundException: com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector not found by com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider [128]
	at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1532)
	at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
	at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

Dahiner steckt ein seit langem bekannter Bug:
https://java.net/jira/browse/GLASSFISH-21141

Dieser ist zum Glück schnell behoben. Durch das hinzufügen der fehlenden Bibliothek: jackson-module-jaxb-annotations-2.5.4 im glassfish/modules – Ordner und anschließendem Restart funktioniert Jackson auch Klaglos mit unserem Glassfish.

Demoprojekt erweitert
pom.xml
JerseyApplicationResource.java

Advertisements

Über Dominik Mathmann
Dominik Mathmann arbeitet als Berater, Entwickler und Trainer bei der GEDOPLAN GmbH. Auf Basis seiner langjährigen Erfahrung in der Implementierung von Java-EE-Anwendungen leitet er Seminare, hält Vorträge und unterstützt Kunden bei der Konzeption und Realisierung von Webanwendungen vom Backend bis zum Frontend. Sein derzeitiger Schwerpunkt liegt dabei auf der Entwicklung von JSF-Anwendungen. Er sieht die stärker werdende Position von JavaScript-Frameworks jedoch positiv und beschäftigt sich darüber hinaus mit Webframeworks wie AngularJS.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: