Как изменить BeanInfo класса (сгенерированного jaxb xj c)? - PullRequest
2 голосов
/ 08 мая 2020

Я создал несколько классов, используя JAXB XJ C. Они следуют этому шаблону (некоторые свойства с геттерами и сеттерами и аннотациями xml):

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "School", propOrder = {
    "info",
    "students"
})
public class School {

    @XmlElement(name = "Info", required = true)
    protected Info info;

    @XmlElement(name = "Students", required = true)
    protected List<Student> students;

    public Info getInfo(){ return info;}

    public void setInfo(Info value){ info = value};

    public List<Students> getStudents(){ 
       if (students == null) {
            students = new ArrayList<Student>();
        }
       return students;
    }

    public void setStudents(List<Student> elements){
       if (students == null) {
            students = new ArrayList<Student>();
        }
       students.addAll(elements);
    } 

Когда я использую java.beans.Introspector.getBeanInfo и BeanInfo.getPropertyDescriptors для получения класса BeanInfo, я вижу, что мой School class имеет свойство под названием students, где WriteMethod означает setStudents(List). Я считаю, что BeanInfo этого класса был сгенерирован в соответствии с правилами Bean по умолчанию, в соответствии со спецификацией Java Beans :

Если мы обнаружим совпадающую пару get<PropertyName> и set<PropertyName> методы, которые принимают и возвращают один и тот же тип, тогда мы рассматриваем эти методы как определяющие свойство чтения-записи, имя которого будет <propertyName>.

Итак, как я могу изменить BeanInfo этого класса? Точнее, я хочу установить WriteMethod свойства students как другой метод, который не следует правилу по умолчанию, упомянутому выше (это будет public void setStudent (Student student){...}). Как я могу это сделать?

Только для того, чтобы убедиться, что все ясно ... Когда я использую java.beans.Introspector.getBeanInfo и BeanInfo.getPropertyDescriptors для получения класса BeanInfo , я хочу видеть , что мой * Класс 1030 * имеет свойство students, причем WriteMethod является моим новым методом набора (setStudents(Student), который не соответствует правилу по умолчанию).

Я кое-что видел здесь , но мне этого было мало ...

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...