Ich bin mit Glassfish 4.1.2Glassfish JAX-RS POJO zu JSON Serialisierung nicht
Ich habe ein JAX-RS-Endpunkt, dass ich von meiner POJO Einheit serialisiert ein JSON-Objekt zurückgeben möchten.
Die POJO:
@XmlRootElement
public class MyObj {
public MyObj() {}
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
Die Ressource:
@Path("/something")
public class MyResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public MyObj getMyObject() {
MyObj myObj = new MyObj();
myObj.setValue("Some Value");
return myObj;
}
}
Erzeugt zwei Ausnahmen: Der erste wird ausgelöst, wenn die Ressource zuerst zugegriffen wird, nachdem der Server gestartet wird:
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: javax/xml/parsers/ParserConfigurationException
Alle nachfolgenden Anforderungen erzeugen die Ausnahme:
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class org.eclipse.persistence.jaxb.BeanValidationHelper
Wenn ich jedoch das Ergebnis als XML (d. H. Ich ändere zu @Produces(MediaType.APPLICATION_XML)
) es funktioniert ohne Ausnahme und die XML zurückgegeben wird keine Probleme.
Meine Anfrage Header akzeptiert sowohl XML und JSON.
UPDATE
Mein Projekt Abhängigkeiten sind:
javax:javaee-api:7.0
com.lambdaworks:scrypt:1.4.0
commons-codec:commons-codec:1.10
org.apache.commons:commons-lang3:3.6
Ich habe im Grunde dieses Projekt bis auf die nackten Knochen abgestreift.
UPDATE 2
Beratung von @peeskillet von jersey.config.server.disableMoxyJson, true
auf die Anwendungseigenschaften der Karte hinzugefügt Nach tut Art von Arbeit:
@ApplicationPath("")
public class MyServer extends Application {
@Override
public Map<String, Object> getProperties() {
Map<String, Object> map = new HashMap<>();
map.put("jersey.config.server.disableMoxyJson", true);
return map;
}
}
Die ursprüngliche Anforderung schlägt mit:
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/jaxb/JaxbAnnotationIntrospector
ABER dann funktionieren alle nachfolgenden Anfragen und ich kann den JSON in der Antwort bekommen.
Ich bin ein wenig besorgt, dass es zunächst fehlschlägt.
Welche Gläser/Abhängigkeiten werden Sie für Ihr Projekt? –
@peeskillet siehe mein Update – Neilos
Was passiert, wenn Sie Jackson anstelle des Standard-MOXy für die JSON-Verarbeitung verwenden? Wenn Sie eine 'Application'-Unterklasse für Ihre JAX-RS-Konfiguration verwenden, überschreiben Sie [getProperties] (http://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Application.html#getProperties -) und fügen Sie eine Eigenschaft mit dem Schlüssel '" jersey.config.server.provider.classnames "' und dem Wert '" org.glassfish.jersey.jackson.JacksonFeature "' –