JAXB: Вы должны указать каждое поле, которое будет включено?

1

У меня есть класс, который я хочу сортировать, и этот класс аннотируется с помощью @XmlRootElement. Когда я собираю экземпляр этого экземпляра, JAXB создает XML без ничего, кроме корневого элемента. Когда я вручную аннотирую каждое поле моего класса, тогда все поля включены. Похоже, вы должны аннотировать каждое поле, чтобы оно было включено в вывод. Может ли кто-нибудь подтвердить это? Если да, то почему JAXB называется configuration-by-exception когда вам нужно настроить каждое поле?

Не работает:

@XmlRootElement
public class Person {
    private int name;
    private String email;
    private String tel;
    //constructor getters/setters
}

Производит <?xml version="1.0" encoding="UTF-8" standalone="yes"?><person/>.

В приведенном ниже примере представлены все поля на выходе.

@XmlRootElement
public class Person {
    @XmlElement private int name;
    @XmlElement private String email;
    @XmlElement private String tel;
    //constructor getters/setters
}
Теги:
jaxb
marshalling

1 ответ

1
Лучший ответ

В реализациях JAXB (JSR-222) вообще не требуются аннотации:

Я подозреваю, что что-то не так с вашими парами getter/setter. Вы должны убедиться, что они похожи на следующие:

public int getName() {
    return name;
}

public void setName(int name) {
    this.name = name;
}

ОБНОВИТЬ

По-видимому, я был жертвой позднего ночного кодирования. При создании геттеров/сеттеров я выбрал только геттеры и что JAXB вообще не понравился.

По умолчанию JAXB не будет обрабатывать свойства только с помощью геттера. С помощью только геттера вам нужно комментировать @XmlElement.

@XmlElement
public int getName() {
    return name;
}
  • 1
    Я был, очевидно, жертвой позднего ночного кодирования. При генерации геттеров / сеттеров я выбирал только геттеры, и JAXB не нравился вообще.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню