JAXB中的模式转换

时间:2017-10-21 10:15:47

标签: java xml jaxb converter

我们假设,我有一个样本类foo,其属性为bar。我已经为JAXB设置了注释,因此我可以将其导出为XML并重新导入它。

@XmlRootElement
public class foo {
    private int bar;

    @XmlElement()
    public int getBar() {
        return bar;
    }

    public void setBar(int bar) {
        this.bar = bar;
    }
}

XML文件应该看起来像这样:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<foo>
    <bar>5</bar>
</foo>

现在我已经了解到,我也可以将bar作为属性。改为使用@XmlAttribute会使其看起来像<foo bar="5"/>,我更喜欢它?

我已经有很多使用旧架构的文件。手动更换它们会非常麻烦,所以我想自动完成。

JAXB是否提供了转换文件的便捷方式?也许解组和编组有不同的注释?如果不付出太多努力,我还能做些什么呢?

1 个答案:

答案 0 :(得分:0)

不是JAXB的专家,并且可以提供更优雅的解决方案。但无论如何,这是一个 - 也许不是那么优雅 - 解决方案。

class foo中你会改变

@XmlElement()
public int getBar() {

@XmlAttribute()    
public int getBar() {

然后,您可以继承foo以解组旧文件

@XmlRootElement
public class foo2 extends foo {

    @Override
    @XmlElement()    
    public int getBar() {
        return super.getBar();
    }

    @Override
    public void setBar(int bar) {
        super.setBar(bar);
    }
}

然后可以通过

foo2作为超级foo进行编组

JAXBContext context = JAXBContext.newInstance(foo.class);