在JAXB中设置默认值

时间:2012-03-27 08:18:31

标签: java xml jaxb

我有一个xml文件,如下所示,当filePath2为null或为空时,我希望它的值为filePath1的值。有没有办法通过JAXB实现这一目标。

<file filePath1="C:/filePath">
   <subFile name="Test">
      <filePath2></filePath2>   
   </subFile>
<file/>

我不想硬编码默认值。如果filePath2的值为null或空白(“”),我想将filePath1属性设置为'String filePath'的值。有没有办法通过JAXB中的setter来实现?

3 个答案:

答案 0 :(得分:3)

使用普通的Oracle JAXB我只看到使用javax.xml.bind.Unmarshaller.Listener实现它的可能性。 在模型类中实现该接口,并在afterUnmarshal(..)方法中执行必要的检查。

您可以访问filePath1的值并将其设置(如有必要)到filePath2

答案 1 :(得分:2)

感谢您的所有投入,最后我选择了更简单的解决方案;更新正在调用filePath2的setter。 JAXB部分 -

String filePath2;
@XmlElement(required = true)
public void setFilePath2(final String file) {
    this.filePath2= file;
}

使用filePath的地方 -

if (filePath2 == null || filePath2.isEmpty()) {
   setFilePath2(getFilePath1());
}

如果您遇到一个简单的解决方案,请告诉我。

答案 2 :(得分:1)

如果你可以使用注释,那么这应该是技巧

...
private String foo;

@XmlElement(defaultValue="bar")
public String getFoo() {
    return foo;
}
...