它定义了一个 DataTO 类,如下所示:
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class DataTO {
private boolean data;
public Boolean getData() {
return data;
}
public void setData(boolean data) {
this.data = data;
}
public void setData(Boolean data) {
this.data = data;
}
}
使用 Java 6,编码工作正常,生成的 XML 为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<dataTO>
<data>true</data>
</dataTO>
在 Java 7 中,我们遇到了 XML 未正确生成的问题。我们只能在某些特定的复杂环境中重现该问题,无法隔离:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<dataTO/>
为什么不同的 Java 版本会有不同的行为?
最佳答案
所以,这是我的理论。
如果没有定义任何访问类型,您的 JAXB 提供程序默认访问类型需要具有与字段匹配类型的 getter/setter。
对此的支持是,添加具有 boolean 返回类型的 getter 可以解决示例中的问题。
如果您使用 @XmlAccessorType(XmlAccessType.FIELD),那么无论 getter/setter 是什么,它都会起作用,因为它会忽略它们。
对于java版本之间的不同行为,我无法解释。也许您的 JAXB 提供商在其实现中更改了某些内容?
关于java - 具有多个同名 setter 的 JAXB 行为编码(marshal)类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37828736/