2016-11-30 8 views
1

Вот что я делаю:Как сделать поле базового класса атрибут XML-схемы подклассов с помощью JAXB

Это мой класс формы, который имеет идентификатор

public class Shape { 
    private int id; 

    @XmlAttribute 
    public int getId(){ 
     return id; 
    } 

    public void setId(int no) 
     id = no; 
    } 

} 

Это мой круг класс который наследует класс формы.

@XmlRootElement(name="Circle") 
    public class Circle extends Shape { 

     private int radius; 

     public int getRadius() { 
      return radius; 

     } 
     public void setRadius(int rad) { 
      radius = rad; 
     } 


} 

Сформирован ПОМ файл

<?xml version="1.0" encoding="UTF-8"?> 
<Circle> 
<id>1345</id> 
<radius>5</radius> 
</Circle> 

Я хочу этого. Обратите внимание, что идентификатор является атрибутом, а не элементом, как указано выше.

<?xml version="1.0" encoding="UTF-8"?> 
<Circle id=1345> 
<radius>5</radius> 
</Circle> 

Как я могу это сделать.

Я использую java8 jaxb Любая помощь!

ответ

2

привет Пожалуйста, попробуйте класс Driver, как показано ниже.

общественного класса конвертер {

public static void main(String[] args) { 
    Circle circle = new Circle(); 
     circle.setRadius(5); 
     circle.setId(1234); 
     try { 

     File file = new File("Y:\\file.xml"); 
     JAXBContext jaxbContext = JAXBContext.newInstance(Circle.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

     // output pretty printed 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     jaxbMarshaller.marshal(circle, file); 
     jaxbMarshaller.marshal(circle, System.out); 

      } catch (JAXBException e) { 
     e.printStackTrace(); 
      } 
} 

}