java - JAXB 编辑列表 setter/getter ?

标签 java jaxb getter-setter moxy xjc

我有 XSD 文件形式的数据模型,然后使用命令行从 xjc 生成相应的 Java 文件。

当我从 XSD 生成 JAXB 类时,List 类型元素获取为它们生成的 getter 方法(没有相应的 setter 方法),如下所示:

public List<Type> getElement3() {
    if (element3 == null) {
        element3 = new ArrayList<Type>();
    }
    return this.element3;
}

几乎每个从 List 类型的 XSD 生成的文件中都有很多字段。

用例:

现在,我不希望通过 null 检查生成 getter。我的应用程序代码具有经常调用每个字段的 getter 的逻辑,这导致它们初始化为 empty List

然后在编码时我必须停止空列表以传递有效负载以避免通过网络发送大量空列表。

PS:我有一个用例,其中 Empty List 由用户明确设置,服务器必须在后端删除某些项目。因此,区分该值是由用户显式设置还是仅仅因为 List 的 getter 在访问该字段 期间被调用而设置。

那么,如何让 JAXB 生成一个没有 null 检查的 getter ??

因为,在编译后编辑生成的 java 文件会很麻烦,因为它存在于很多文件中,而且我们的 XSD 版本正在更新,每次出现新版本时都必须执行编辑。

最佳答案

起初,我会考虑使用自定义 JAXB 绑定(bind),但我想不出任何可以满足此要求的方法。

在这种情况下,也许您可​​以使用包装器类:

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "employees")
@XmlAccessorType (XmlAccessType.FIELD)
public class Employees
{
    @XmlElement(name = "employee")
    private List<Employee> employees = null;

    public List<Employee> getEmployees() {
        return employees;
    }

    public void setEmployees(List<Employee> employees) {
        this.employees = employees;
    }
}

然后定义你的业务对象:

@XmlRootElement(name = "employee")
@XmlAccessorType (XmlAccessType.FIELD)
public class Employee
{
    private Integer id;
    private String firstName;
    private String lastName;
    private double income;

    //Getters and Setters
}

在生成要编码的对象时,您必须自己控制列表的初始化:

Employees employees = new Employees();
employees.setEmployees(new ArrayList<Employee>());

此示例的来源:Here

关于java - JAXB 编辑列表 setter/getter ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51304471/

相关文章:

php - 单元测试访问器(getter 和 setter)

java - 用Lombok 1.18.12构建的Gradle 6.4不生成getter和setter

java - 如何禁用 Android Camera2 API 中的所有自动功能

java - 将JComboBox添加到JTable : ComboBoxes in different rows are not independent

java - 为什么用户输入的 double 不接受与常规 double 相同的参数?

java - ObjectAnimator 翻译后 Android View 位置未更新

java - 如何自定义 JAXB 生成的 java 注释?

Java setter 和 getter 方法

java - 使用 JAXB 将 XML 数据解析为字符串对象

java - 在 JAXB 注释的对象中使用带有 toXML 方法的对象?