我一直在寻找一种方法来更改 xs:any 元素的 JAXB 行为,因为我们使用的是流而不是 DOM。我们需要能够处理巨大(千兆字节)的数据文件/流。
JAXB 将使用它们上的 @XmlAnyElement 注释生成任何属性。由于我们使用自己的流实现,我们需要完全避免 JAXB 生成任何属性。但是,似乎不可能告诉 JAXB 绑定忽略 xs:any 元素。
在我目前对这个主题的研究中,我发现可以编写一个 DomHandler,它将被使用。现在如果这个 DomHandler 看起来像这样:
StreamHandler implements DomHandler<MyStream, StreamResult>
我们可以使用这个 DomHandler 来完成这项工作,而无需在我们生成的类旁边添加流逻辑。现在我们可以重用生成的任何属性。
DomHandler 应该设置如下
@XmlAnyElement(StreamHandler.class)
但是如何在 jaxb 绑定 xjb 文件中定义以在生成的 @XmlAnyElement 注释中使用这个 DomHandler 呢?
编辑:
我提出了这个请求并实现了一个 JAXB maven-plugin 插件来解决这个问题。我可能会要求将此插件添加到 basics-addon 捆绑包中。