访问用于JAXRS资源方法的默认JAXB marshaller

时间:2016-04-11 21:01:27

标签: java xml jaxb

我有许多REST资源类,它们返回一个模型实体,并依赖于JAXRS自动转换为XML(没有我自己的自定义Provider)。我希望能够访问用于此的JAXB marshaller实例,以便我可以配置ValidationEventHandler来捕获异常。我该怎么做?

这是我的示例实体资源:

@Path("/device")
public class DeviceResource extends CaBridgeServletResourceManager {
    /**
     * Get the server status.
     */
    @GET
    @Path("/config")
    public DeviceConfigurationResponse getDeviceConfigurationResponse() {
        DeviceService service = new DeviceService(getSessionContext());
        DeviceConfigurationResponse response = service.createConfigurationResponse(getDeviceCredential());

        return response;
    }
}

我希望能够做到这样的事情:

        Marshaller marshaller = ... get jaxrs default marshaller ...
        marshaller.setEventHandler(new MyMarshallerEventHandler());

如何获取jaxrs使用的默认编组器?或者是否有我可以访问资源类的每个实例的新marshaller实例(上图)?

我宁愿避免为我拥有的每个实体类创建自定义Provider类。

1 个答案:

答案 0 :(得分:1)

定义一个ContextResolver,它将被使用:

@Provider
public class JaxbMarshallerProvider implements ContextResolver<Marshaller> {
    @Override
    public Marshaller getContext(Class<?> type) {
    }
}

对于Unmarshaller来说也是如此。我们通常一次实例化JAXBContext并将其存储在提供程序类中的静态成员中。