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