JAXB动态Xml标记生成

时间:2011-07-29 16:44:45

标签: methods null jaxb getter

在我当前的JAXB marshaller应用程序中,我需要有条件地将一个元素写入xml。 让我看看我是否可以想到一个例子,而不是让它听起来像大学作业。

我有一个名为Student的类,其属性称为merit和status。并非所有学生都会有优异成绩。只有非新生学生才会有优点(被称为身份的财产会提供有关学生是否是新生的信息)。当我浏览学生列表并编组成xml时,我需要有条件地显示Merit。 如何使用JAXB处理XML元素的动态创建?我可以想到一个解决方案,我将我的Student课程分成FreshManStudents和OtherStudents,并将其作为@XMlTransient定义为Otherstudents。为了JAXB的目的,重构我的对象不是有点过分吗?

或者,我可以让getMerit adn中的逻辑让getMerit为Freshman学生返回NULL。假设JAXB忽略了null对象,那么这是解决问题的有效(读取优雅)方法吗?

感谢您的意见和建议

 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 :(得分:0)

快速修复

  

或者,我可以让getMerit adn里面的逻辑有   getMerit为Freshman学生返回NULL。假设JAXB忽略null   对象,是一种有效(阅读优雅)的方法来解决问题吗?

这样可以使用,并匹配您的问题描述(如下):

  

我有一个名为Student的类,其属性称为merit和status。   并非所有学生都会有优异成绩。只有非新生才会   有优点(属性称为状态提供有关是否的信息   学生是否是新生)


关于继承

  

我可以想到一个解决方案,我将我的学生课分成了   FreshManStudents和OtherStudents并将优点定义为@XMlTransient   对于其他学生。重构我的对象不是有点矫枉过正   仅用于JAXB目的?

无论JAXB是否参与,您的用例都要求继承:

<强>学生

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;        
    } 

}

了解更多信息