【发布时间】:2015-10-01 15:23:20
【问题描述】:
在我的 Java (Maven) 项目中,我使用 JAXB 2.2.11 从我们的服务器接收到的 XML 有效负载重建类的实例。我有一个定义类的.xsd 模式,它与 JAXB 结合使用可以很好地重建我想要的类型的实例。我遇到的问题是这些有效负载可能(没有任何通知或警告)具有我并不真正关心的额外元素。
这些额外元素可能出现的位置之一是在xs:all 标记内。我确实喜欢上面提到的xs:all 标签的功能:
all 元素指定子元素可以出现在任何 顺序,并且每个子元素可以出现零次或一次。
但是,我不想在处理包含额外属性的 XML 有效负载时出现解析错误。 xs:any 在xs:all 中的标签会很好用,但在 XSD 1.0 中是不允许的(根据w3schools 和其他SO answer),显然,JAXB 不支持 XSD 1.1。此外,JAXB 处理any 或anyAttribute 的方式非常有趣,因为它将所有未知节点放入地图中,所以我可以记录它说 “嘿!我们收到的属性是我们现在并不真正关心,但也许你会发现它在未来有些用处?”
我读过支持 XSD 1.1 的 Xsom,但显然,它不会返回您想要的类的 instance,而是更通用的哈希映射和列表集,因此失去了我的类型检查,这是我不希望的。
那么...有没有办法假装在xs:all 中有一个xs:any?
【问题讨论】:
标签: java maven xsd jaxb xsd-1.0