在JaxB中是否有相应的Jackson HandlerInstantiator?

时间:2016-02-21 18:02:07

标签: java xml jaxb jackson

我是一名JaxB菜鸟,但我已经学会了很多关于如何配置杰克逊的知识。我正在为某些域对象类添加XML序列化/反序列化支持。我有一个类型序列化/反序列化的类型取决于必须指定的上下文。

我能够通过编写HandlerInstantiator的自定义实现在杰克逊中完成此任务。自定义实现将上下文作为构造函数参数。当这些上下文敏感对象需要序列化程序或反序列化程序时,提供它的方法会使用构造处理程序的上下文对其进行实例化。我为我的库编写了一个服务类,用户可以使用它来请求为所需的上下文配置的对象映射器。

通过这种方式,我仍然可以在受此上下文敏感行为影响的字段上使用@JsonSerialize@JsonDeserialize注释,即使我需要使用非默认构造函数实例化这些类

那么,有什么类似于我在JaxB中可以做的事情,所以我可以编写泛型XmlAdapters,它将上下文作为其构造函数的参数?默认情况下,JaxB和Jackson一样,需要适配器的无参数构造函数。我希望有一些类似于杰克逊InstantiatorHandler的东西,我可以覆盖,然后以某种方式配置JaxB以类似的方式使用。

1 个答案:

答案 0 :(得分:0)

您可以将任何XmlAdapter类绑定到具体实例。 JAXB Marshaller / Unmarshaller接口都提供方法setAdapter

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setAdapter(new MyClassXmlAdapter(...));

现在所有使用@XmlJavaTypeAdapter注释的字段/类型都将使用给定的实例进行调整