首页 文章

如何使用默认的Jersey JAXB MessageBodyWriter for XML与自定义提供程序混合?

提问于
浏览
0

我似乎无法让我的基于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 回答

  • 0

    我终于想通了我的实体类中有一个重大错误 . 我忘记了@XmlRootElement注释 . 叹 . :(

相关问题