java - 具有多个同名 setter 的 JAXB 行为编码(marshal)类

标签 java jaxb marshalling

它定义了一个 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/

相关文章:

c# - 如何正确地将字符串从 Unity 编码到 C/C++?

java - 由 : javax. xml.bind.JAXBException 引起:此上下文已知类或其任何父类(super class)

java - jsp 页面中的 HTML 无效

Jaxb EclipseLink/MOXy : Is it possible to specify the names of get/set methods

java - 在 Android Java 中从客户端使用 GET\POST 调用服务器方法

web-services - JAX-WS 更改 WebParam 的命名空间

java - 从大型 XML 文件中删除不可打印和/或 unicode 字符

c# - 从非托管 C++ 调用 C# 传递或返回 "Complex"类型

java - Java 中的正则表达式 : Finding the numbers that follow a given set of substrings

java - 如何在 Json 中发送 java.util.Date?