【问题标题】:Does JAXB always ignore 'extra' elements not specified in @XmlType/propOrder?JAXB 是否总是忽略 @XmlType/propOrder 中未指定的“额外”元素?
【发布时间】:2012-06-21 17:06:03
【问题描述】:

如果我有一个用

注释的类

@XmlType(name = "someDTO", propOrder = { "firstField", "secondField", })

但是 XML(比如来自 SOAP 响应)看起来像

<return><firstField>a</firstField><secondField>b</secondField><thirdField>c</thirdField></return>

我的对象仍将填充 firstField 和 secondField,并且忽略 thirdField。

这是为什么?会一直这样吗?如果存在额外的字段,有没有办法阻止创建对象?

【问题讨论】:

    标签: java xml jaxb


    【解决方案1】:

    如果有映射到 XML 元素的属性未包含在 propOrder 中,一些 JAXB (JSR-222) 实现会报错。 @XmlType 上的 propOder 不用于控制包含/排除哪些元素。

    排除属性的选项

    1. 如果您想排除不到一半的属性,那么我建议您使用@XmlTransient 标记您希望排除的属性。
    2. 如果您希望排除超过一半的属性,那么我建议您使用@XmlAccessorType(XmlAccessType.NONE) 并注释您希望包含的属性。

    更多信息

    【讨论】:

    • 你知道如果有没有映射到任何属性的 XML 元素,是否有任何 JAXB 实现会抱怨?
    • @Derek - 您可以在Unmarshaller 上设置ValidationEventHandler,当点击未映射的内容时应该报告warning
    • @BlaiseDoughan,如果需要不止一个案例呢?例如,一次我需要一个特定的领域,而另一次则不需要……我该怎么做?
    • 此外,XmlTransient 注释必须像 XmlElement 注释一样添加到字段的设置器上。
    猜你喜欢
    • 1970-01-01
    • 2011-06-29
    • 2021-11-29
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多