如何手动配置JAXBContext?

时间:2018-08-08 07:04:16

标签: spring-boot jaxb jersey moxy

那里有很多示例说明如何使用Spring和Jersey将带注释的POJO(或者将未带注释的POJO封装在JAXBElement中)转换为XML。一切都很好,但是这对我来说也有点神秘。

我想了解更多有关此方法的信息,并且想为Jersey提供我自己选择的JAXB实现。我想为此使用MOXy

  1. 我是否需要“手动”创建(MOXyJAXBContext供泽西使用,并以某种方式向泽西提供该JAXBContext。我需要通过JAXBContextFactory来做到这一点吗?

  2. 如果以上假设正确,我如何向泽西岛提供JAXBContext?我尝试为@Provider设置ContextResolver<JAXBContext>,但这并没有真正起作用/有所作为。如何告诉泽西岛使用哪个JAXBContext?

春季配置

@Provider
public class JAXBConfiguration implements ContextResolver<JAXBContext> {

    private JAXBContext context;

    public JAXBConfiguration() throws Exception {
        this.context = JAXBContext.newInstance("package.where.model.lives");
    }

    @Override
    public JAXBContext getContext(Class<?> objectType) {
        return context;
    }
}

泽西岛资源

@Component
@Path("/test")
public class LabelsResource {

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public Response getLabels(@QueryParam("labelIds") String labelIds) {

        try {
            DefaultLabel entity = new DefaultLabel();
            entity.setName("name");
            entity.setCode("code");

            // Works    
            //return Response.ok(new JAXBElement<DefaultLabel>(new QName("label"), DefaultLabel.class, entity)).build();

            // Does not work
            return Response.ok(entity).build();

        } catch (Exception e) {
            return Response.serverError().entity(e.getMessage()).build();
        }

    }

0 个答案:

没有答案