Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 访问用于JAXRS资源方法的默认JAXB封送器_Java_Xml_Jaxb - Fatal编程技术网

Java 访问用于JAXRS资源方法的默认JAXB封送器

Java 访问用于JAXRS资源方法的默认JAXB封送器,java,xml,jaxb,Java,Xml,Jaxb,我有许多REST资源类,它们返回一个模型实体,并依赖JAXR自动转换为XML(无需我自己的自定义提供程序)。我希望能够访问用于此目的的JAXB marshaller实例,以便配置ValidationEventHandler来捕获异常。我该怎么做 以下是我的示例实体资源: @Path("/device") public class DeviceResource extends CaBridgeServletResourceManager { /** * Get the serve

我有许多REST资源类,它们返回一个模型实体,并依赖JAXR自动转换为XML(无需我自己的自定义提供程序)。我希望能够访问用于此目的的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实例可以访问


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

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

@Provider
public class JaxbMarshallerProvider implements ContextResolver<Marshaller> {
    @Override
    public Marshaller getContext(Class<?> type) {
    }
}
@Provider
公共类JaxbMarshallerProvider实现ContextResolver{
@凌驾
公共封送拆收器getContext(类类型){
}
}
同样的事情也发生在破译者身上。我们通常实例化一次JAXBContext,并将其存储在provider类的静态成员中