当前位置: 首页 > 知识库问答 >
问题:

JaxB中是否有与Jackson HandlerInstantiator等效的工具?

胡致远
2023-03-14

我是一个JaxB noob,但我学到了很多关于如何配置Jackson的知识。我正在为一些域对象类添加XML序列化/反序列化支持。我有一个类类型,它根据必须指定的上下文进行不同的序列化/反序列化。

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

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

那么,我是否可以在JaxB中做类似的事情,以便编写通用的XmlAdapters,将上下文作为其构造函数的参数?默认情况下,JaxB与Jackson一样,需要适配器的无arg构造函数。我希望有一个类似于Jackson实例化处理器(InstanceorHandler)的东西,我可以覆盖它,然后以某种方式配置JaxB以类似的方式使用。

共有1个答案

傅皓君
2023-03-14

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

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

现在,用@XmlJavaTypeAdapter注释的所有字段/类型都将与给定实例相适应

 类似资料:
  • 问题内容: 当搜索复杂的JSON数组和哈希中的项目时,例如: 我可以使用某种查询语言来查找商品吗? 问题答案: 是的,它称为JSONPath。源码现在在GitHub上。 它还集成到DOJO中。

  • 问题内容: 我为一位同伴编写了一个网络刮板,以节省他的工作时间。它是使用,使用和打开Firefox浏览器编写的。 我已经在使用的Linux机器上亲自编写了此代码,因此Firefox实际上不会打开并干扰我的工作。 如何使其在Windows PC的虚拟显示器中运行? 问题答案: 您无法在Windows上运行的原因是PyVirtualDisplay使用Xvfb作为其显示,而Xvfb是X Window S

  • 问题内容: Java具有格式字符串的概念,与其他语言的格式字符串非常相似。它用于诸如输出转换之类的JDK方法中。 我想知道在Java中是否有类似于C的输入转换方法? 问题答案: 看一下该站点,它解释了两种使用java中的控制台读取的方法,使用或使用System.in中的经典方法。 以下代码摘自引用的网站: - 问候。

  • 问题内容: 我想从数据库中获取一个对象(如果已存在)(基于提供的参数),或者如果不存在则创建它。 Django的(或)做到了。SQLAlchemy中是否有等效的快捷方式? 我目前正在像这样明确地写出来: 问题答案: 基本上就是这样做的方法,没有快捷方式可供使用的AFAIK。 你可以将其概括为:

  • 请注意,我使用以下代码得到了相同的结果: 所以问题是,fooObservable直到订阅了PublishSubject之后才订阅PublishSubject, 是否有一种方法可以在第一次订阅FooObservable之后立即运行代码? 如果请求与已经订阅的请求匹配,那么observable应该在订阅时立即提供最新的匹配值。 当没有订阅者时,我需要取消我包装的服务的订阅。

  • 问题内容: 好的,我想知道的是Java有什么方法可以执行以下Python可以做到的… 因为在我看来Java可以使您获得相同的结果(我特别需要每次使用2个数字,而缺少-1来表示最后一个字符) 我还没有用Java来研究数组/列表,所以真正希望Java比这更容易 编辑:将string_sample [3]的“ i”修改为“ l”。很好看的Maroun! 问题答案: 抱歉,Java的灵活性不如Python