【发布时间】:2017-02-24 21:50:28
【问题描述】:
我似乎无法让基于 Jersey/Jetty 的服务器使用 XML 的默认 JAXB MessageBodyWriter。我收到此错误:
找不到媒体类型=application/xml、类型=...的MessageBodyWriter
我有一个如下所示的应用程序类:
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。
我的问题是如何使用我自己的自定义编组器,但对其他所有内容使用默认的 JAXB 编组器?
这是我对这个项目的球衣的 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")
球衣版本 2.25。
【问题讨论】: