Java 11环境下Jakarta 3中是否可以添加自定义IDResolver?
Jakarta环境自定义IDResolver实现说明
Jakarta XML Binding(原JAXB迁移至jakarta命名空间后的规范实现)完全支持你在Java 8时期用到的自定义IDResolver能力,整体实现逻辑和原先差异很小,仅需要替换相关依赖的包名即可,我所在的项目组已经落地过完全一致的需求场景:
- 自定义Resolver需要继承
jakarta.xml.bind.IDResolver类,分别重写bind、resolve两个核心方法:bind方法用于注册ID和对应对象的映射关系,你可以把预存在内存里的对象、或是从多个拆分文件读取到的对象提前注册到该映射中;resolve方法会在解析IDREF节点时被触发,你可以直接从预存的映射里返回对应ID的对象,也可以在这里做懒加载,按需读取对应拆分文件的内容。 - 绑定自定义Resolver到Unmarshaller的代码示例如下:
// 注意所有导入包均为jakarta.xml.bind开头 JAXBContext context = JAXBContext.newInstance(你的根节点类.class); Unmarshaller unmarshaller = context.createUnmarshaller(); unmarshaller.setProperty(UnmarshallerProperties.ID_RESOLVER, new 你自定义的IDResolver类());
- 如果是从旧的javax版本迁移过来,只需要把所有
javax.xml.bind相关的import全部替换为jakarta.xml.bind下对应的类,原有IDResolver的逻辑不需要做任何改动即可正常运行。
内容的提问来源于stack exchange,提问作者Tiberius
相关产品推荐
相关产品推荐

