我似乎无法让我的基于Jersey / Jetty的服务器使用默认的JAXB MessageBodyWriter for XML . 我收到这个错误:
找不到媒体类型= application / xml的MessageBodyWriter,类型= ...
我有一个Application类,如下所示:
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;
}
}
在上面的示例中,NotificationXmlMarshaller是我的自定义编组器之一,但在尝试编组任何其他实体类型时会发生错误 .
我的理解是,当getClasses()和getSingletons()返回非空值时,将忽略所有默认值 . 所以我假设我正在禁用默认的JAXB xml marshaller .
我的问题是我如何使用我自己的自定义marshallers但使用默认的JAXB marshaller用于其他一切?
以下是我对该项目的球衣的gradle依赖项:
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 版2.25 .
1 回答
我终于想通了我的实体类中有一个重大错误 . 我忘记了@XmlRootElement注释 . 叹 . :(