2017-02-24 2 views
0

Ich kann meinen Jersey/Jetty basierten Server anscheinend nicht dazu bringen, den Standard-JAXB MessageBodyWriter für XML zu verwenden. Ich erhalte diese Fehlermeldung:Wie wird der standardmäßige Jersey JAXB MessageBodyWriter für XML in Kombination mit benutzerdefinierten Anbietern verwendet?

MessageBodyWriter not found for media type=application/xml, type=...

ich eine Anwendungsklasse haben, die wie folgt aussieht:

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

import cmb.agent.engine.resource.AgentCertificateResource; 
import cmb.agent.engine.resource.ProfileResource; 
import cmb.agent.engine.servlet.SessionRequestFilter; 

@ApplicationPath("/") 
public class AgentExample extends Application { 
    private Set<Object>       singletons = new HashSet<Object>(); 
    private Set<Class<?>>      perRequestServices = new HashSet<>(); 

    public AgentExample() { 
     perRequestServices.add(ProfileResource.class); 
     perRequestServices.add(AgentCertificateResource.class); 
     singletons.add(new NotificationXmlMarshaller()); 
     singletons.add(new SessionRequestFilter()); 
    } 

    @Override 
    public Set<Class<?>> getClasses() { 
     return perRequestServices; 
    } 

    @Override 
    public Set<Object> getSingletons() { 
     return singletons; 
    } 
} 

Im obigen Beispiel NotificationXmlMarshaller ist eine meiner benutzerdefinierten Marshaller, aber der Fehler tritt auf, wenn versucht, Marshall irgendein anderer Entitätstyp.

Mein Verständnis ist, dass wenn getClasses() und getSingletons() nicht leere Werte zurückgibt, alle Standardwerte ignoriert werden. Also nehme ich an, dass ich den Standard-JAXB-XML-Marshaller deaktiviere.

Meine Frage ist, wie kann ich meine eigenen benutzerdefinierten Marshaller verwenden, sondern den Standard JAXB Marshaller für alles andere?

Hier sind meine gradle Abhängigkeiten für Trikot für dieses Projekt:

compile("org.glassfish.jersey.containers:jersey-container-servlet:$jerseyGlassfishVersion") 
compile("org.glassfish.jersey.media:jersey-media-jaxb:$jerseyGlassfishVersion") 
compile("org.glassfish.jersey.core:jersey-client:$jerseyGlassfishVersion") 

Jersey Version 2.25.

Antwort

0

Ich fand schließlich heraus, dass ich einen großen Fehler in meiner Entitätsklasse hatte. Ich habe die @ XmlRootElement-Annotation vergessen. Seufzer. :(

Verwandte Themen