JAXB Dynamic Xml Tag Generation - PullRequest
       9

JAXB Dynamic Xml Tag Generation

0 голосов
/ 29 июля 2011

В моем текущем приложении маршаллера JAXB мне нужно условно записать элемент в xml. Дайте мне посмотреть, смогу ли я придумать пример, чтобы он не звучал как домашнее задание колледжа.

У меня есть класс Student со свойствами, которые называются заслуга и статус. Не все студенты будут иметь заслуги. Только студенты, не являющиеся первокурсниками, будут иметь заслуги (свойство, называемое status, дает информацию о том, является ли студент новичком или нет). Пока я просматриваю список студентов и маршаллизирую в xml, мне нужно условно отобразить Merit. Как мне справиться с таким динамическим созданием элементов XML с помощью JAXB? Я могу придумать решение, в котором я делю свой класс Student на FreshManStudents и OtherStudents и определяю заслуги как @XMlTransient для других учащихся. Не слишком ли излишне реорганизовывать мой объект только для целей JAXB?

В качестве альтернативы, я могу иметь логику внутри getMerit, а getMerit return NULL для студентов-первокурсников. Предполагая, что JAXB игнорирует нулевые объекты, это правильный (читай элегантный) способ решения проблемы?

Спасибо за ваши мнения и предложения

 public class Student {
        private Merit merit;
        private String status;

        public Merit getMerit() {
           return merit;
        }

        public void setMerit(Merit m) {
           merit= m;        
        } 

        public String getStatus() {
           return status;
        }

        public void setStatus(String s) {
           status= s;        
        }   

    }

1 Ответ

0 голосов
/ 29 июля 2011

Быстрое исправление

В качестве альтернативы, я могу иметь логику внутри getMerit и иметь getMerit return NULL для студентов-первокурсников.Предполагая, что JAXB игнорирует нулевые объекты, это правильный (читаемый элегантный) способ решения проблемы?

Это будет работать и соответствует описанию вашей проблемы (ниже):

У меня есть класс Student со свойствами, которые называются заслуга и статус.Не все студенты будут иметь заслуги.Только студенты, не являющиеся первокурсниками, будут иметь заслуги (свойство, называемое status, дает информацию о том, является ли студент новичком или нет)

Относительно наследования

Я могу придумать решение, где я разделю свой класс Student на FreshManStudents и OtherStudents и определяю заслуги как @XMlTransient для других учащихся.Не слишком ли излишне реорганизовывать мой объект только для целей JAXB?

Ваш сценарий использования требует наследования независимо от участия JAXB:

Student

public class Student {

    private String status;

    public String getStatus() {
       return status;
    }

    public void setStatus(String s) {
       status= s;        
    }   

}

NonFreshman

public class NonFreshman extends Student {

    private Merit merit;

    public Merit getMerit() {
       return merit;
    }

    public void setMerit(Merit m) {
       merit= m;        
    } 

}

Для получения дополнительной информации

...