2012-07-05 3 views
2

У меня есть следующая конструкция:JAXB наследования + элемент переименовывать

@XMLTransient 
public abstract class Foo { 
    protected String name; 
} 

@XmlRootElement 
@XmlType(propOrder={"name"}) 
public class BarX extends Foo { 

    public String getXThing() { 
     return name; 
    } 

    public void setXThing(String thing) { 
     name = thing; 
    } 
} 

@XmlRootElement 
@XmlType(propOrder={"name"}) 
public class BarY extends Foo { 

    public String getYBlah() { 
     return name; 
    } 

    public void setYBlah(String blah) { 
     name = blah; 
    } 
} 

в пределах XML мне нужно для Barx вместо name тега thing и BARY Я хотел бы иметь blah вместо name. Возможно ли и как я могу это получить?

ответ

1

Вы можете сделать следующее (вы уже были довольно близки):

Foo

package forum11340316; 

import javax.xml.bind.annotation.XmlTransient; 

@XmlTransient 
public abstract class Foo { 
    protected String name; 
} 

Barx

package forum11340316; 

import javax.xml.bind.annotation.*; 

@XmlRootElement 
@XmlType(propOrder={"XThing"}) 
public class BarX extends Foo { 

    @XmlElement(name="thing") 
    public String getXThing() { 
     return name; 
    } 

    public void setXThing(String thing) { 
     name = thing; 
    } 

} 

BARY

package forum11340316; 

import javax.xml.bind.annotation.*; 

@XmlRootElement 
@XmlType(propOrder={"YBlah"}) 
public class BarY extends Foo { 

    @XmlElement(name="blah") 
    public String getYBlah() { 
     return name; 
    } 

    public void setYBlah(String blah) { 
     name = blah; 
    } 

} 

Demo

package forum11340316; 

import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(BarX.class, BarY.class); 
     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     BarX barX = new BarX(); 
     barX.setXThing("XThing"); 
     marshaller.marshal(barX, System.out); 

     BarY barY = new BarY(); 
     barY.setYBlah("YBlah"); 
     marshaller.marshal(barY, System.out); 
    } 

} 

Выход

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<barX> 
    <thing>XThing</thing> 
</barX> 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<barY> 
    <blah>YBlah</blah> 
</barY> 

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

+1

Aaah, ok. Большое спасибо. – arothe

Смежные вопросы