首页 > 解决方案 > 我可以让 JAXB 在遇到的每个未注释列表上自动使用 XmlElementWrapper 吗?

问题描述

我有一个深度嵌套的第三方库,它公开了许多 POJO。此外,我们有一个使用这些 POJO 的类结构。我们使用 JAXB 注释对类进行了注释,以生成 XSD 并针对该 XML 验证 XML,并将该 XML 解析回类结构。

我们的代码广泛使用第三方代码,并且该第三方代码需要成为 XML 验证和解析过程的一部分。我无法注释他们的源代码。这本身不是问题,因为 JAXB 可以很好地处理这些类中的未注释字段。

我现在遇到的唯一问题是列表没有像我预期的那样被处理。如果我List<SomeType> someTypes;在第三方类之一中有一个字段,那么 JAXB 将不会生成包装器,而是我必须使用几个“someTypes”标签,每个标签都指示整个列表的单个条目。
所以不要写

<someTypes>first entry</someTypes>
<someTypes>second entry</someTypes>

我想写

<someTypes>
   <someType>first entry</someType>
   <someType>second entry</someType>
</someTypes>

这种行为通常是使用 XmlWrapperElement 注释实现的,但我无权访问源代码。

有没有办法让 JAXB 默认在那些无法访问的 List 字段上使用 XmlWrapperElement?我不想使用 MOXy 并在 MOXy 的外部配置文件中手动为每个列表字段添加注释。

我尝试使用 XMLAdapter,但它无法工作,因为一个类可以有多个 List 字段,并且 XMLAdapter 只允许一个 XML 标记名称用于所有这些字段,这些字段在所有列表等上也必须相同。

标签: xmljaxbmoxy

解决方案


推荐阅读