【问题标题】:JAXB customisation getter/setter on optional attribute可选属性上的 JAXB 自定义 getter/setter
【发布时间】:2015-02-17 09:41:23
【问题描述】:

正如here 所说,可选属性是作为Java 原语生成的。 完美,正是我想要的。

<xsd:complexType name="applicationType">
   [...]
  <xsd:attribute name="id" type="xsd:int"/>
</xsd:complexType>

将绑定在:

@XmlAttribute(name = "id")
protected Integer id;

... 但是:getter 还返回 int ! (引擎盖下有拳击)

public int getId() {
    return id;
}

所以,问题是: 如何强制 getter 方法返回 Java 原语?

非常感谢您的帮助 问候

【问题讨论】:

  • 这个问题你解决了吗?如果你解决了,你是怎么做的?

标签: java jaxb


【解决方案1】:

更改&lt;xsd:attribute name="id" type="xsd:int" use="required"/&gt;中的属性

如果你不使用 required 这个属性可以是 nillable 并且在 java 对象中只有 Integer 可以表达这个概念。

Reference here

由于该属性是可选的,因此它可能是 nillable 使用原语是不可能的。这 java.lang.Integer 是一个对象,因此允许为空,所以它 生成一个 作为 java.lang.整数。 如果您使属性成为必需(use="required"),它将生成为原始 int。我没有 看到 JAXB 的文档明确说明了这一点,但事实并非如此 表示它不存在;也许我只是错过了。

【讨论】:

  • 另见java.net/jira/browse/JAXB-927optionalProperty="primitive"
  • Thx, Xstian 我已经尝试过了 ;-) 首先,getter 方法仍然返回 int(而不是 Integer)。而且,我必须尽可能减少对 XSD 文件的干扰。我只能(如果真的有必要)在全局级别更改 JAXB 自定义但我更愿意使用 jaxb2-maven-plugin 进行 JSXB 自定义。剩下的一点(对我来说似乎很奇怪)是 getter 方法。如何强制它返回 Integer ?
  • @SylvainR 你能添加整个 complexType 吗? ..这种行为很奇怪。也许还有 jaxb2-maven-plugin 配置
  • @Xstian,我已经浏览到 jaxb2-maven-plugin 配置 xjc,但没有具体的东西可以强制方法返回 Java 原语。
  • @SylvainR 你能添加所有配置和你的xsd吗?为了更好地帮助你:)
猜你喜欢
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多