GEDOPLAN
Application ServerJakarta EE (Java EE)

Jackson + Glassfish 4.1.1

Application ServerJakarta EE (Java EE)

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!