【问题标题】:Which attribute in XSD will annotate a field with @XmlElement(required = false) in JAXB generated classesXSD 中的哪个属性将在 JAXB 生成的类中使用 @XmlElement(required = false) 注释字段
【发布时间】:2014-04-15 11:28:58
【问题描述】:

我想在我的 jaxb 生成的类中用这个注解来注解一个字段 - @XmlElement(required = false)。 XSD 中的哪个属性会使用此注释生成我的字段? 我无法手动输入,因为每次运行构建时 JAXB 类都是使用 Maven 自动生成的。

我的 jaxb 版本是 xjc 2.2.4-2

谢谢

【问题讨论】:

  • 我的要求是使该字段可选。我知道,如果我在 XSD 中将该字段声明为 micOccurs=0,它将完成这项工作。但是当我这样做时,xjc 默认情况下不会将@XmlElement(required = false) 注释添加到 jaxb 类中的字段。
  • 另一个有趣的观察是,当我在 jaxb 类中手动键入字段的注释并使用 JDK 的 schemagen 工具从 jaxb 类生成模式时,我看到该字段添加了minOccurs=0 生成架构中的属性

标签: java jaxb xsd jaxb2 jaxb2-maven-plugin


【解决方案1】:

当一个元素具有minOccurs="0" 时,对应的@XmlElement 具有required=false。请注意,false 是 required 属性的默认值,因此它实际上可能不会出现在生成的注释中。


更新

根据您的评论:

让我解释一下我的实际问题。我正在使用杰克逊来生成 JAXB 类中的 JSON。问题是当元素不是 存在于 xml 中,我看到 json 输出的字段名称为“pip” 和值为空。我实际上期望字段“点子”是 我的 json 输出中没有,因为我在 XSD。无法确定这是 JAXB 还是 Jackson 的问题。 有趣的是,当我使用 required=false 显式注释该字段时 在 jaxb 类中,我看到了我的预期输出,该字段为 缺席

这是 Jackson 未正确处理 @XmlElement 注释上的 required 属性的默认值的问题。

【讨论】:

  • 谢谢布莱斯。这正是我所希望的,但这里就是这种情况。以下是代码sn-ps。 XSD<xs:element name="pip" type="pipType" minOccurs="0" maxOccurs="unbounded"/>JAXBprotected List<PipType> pip;
  • @GangaAloori - 我已经用一些应该有帮助的信息更新了我的答案。
  • 再次感谢。有帮助。让我解释一下我的实际问题。我正在使用 Jackson 从 JAXB 类生成 JSON。问题是当 xml 中不存在元素 时,我看到 json 输出的字段名称为“pip”,值为 null。我实际上希望我的 json 输出中不存在“pip”字段,因为我在 XSD 中声明它为minOccurs=0。无法确定这是 JAXB 还是 Jackson 的问题。有趣的是,当我在 jaxb 类中使用 required=false 显式注释该字段时,我看到该字段不存在的预期输出
  • @GangaAloori - 我已经更新了我的答案。这是 Jackson 没有正确处理 @XmlElement 注释上的 required 属性的默认值的问题。
  • 感谢您的更新。 JAXB 根​​本不会为该字段生成 @XmlElement 注释。我已经在我之前的评论中发布了 XSD 中的元素声明和 JAXB 类中的生成字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多