욱'S 노트

JAXB - Annotating Classes 본문

Programming/JAXB

JAXB - Annotating Classes

devsun 2015. 2. 23. 16:18

Mapping interfaces


W3C XML Schema로부터 나온 XML 타입과 자바 타입 시스템의 차이 때문에, JAXB는 인터페이스를 out of box로 바인딩을 하지 못하지만, 몇 가지 요소들을 제공한다.


@XmlRootElement


인터페이스가 많은 서브 클래스로 구현된다면 XmlRootElement를 사용하는 것을 고려할 수 있다.


@XmlRootElement

class Zoo {

@XmlAnyElement

public List<Animal> animals;

}

         

interface Animal {        

void sleep();

void eat();

  ...

}


@XmlRootElement

class Dog implements Animal { ... }


@XmlRootElement

class Lion implements Animal { ... }


결과는 다음과 같이 표현될 것이다.


<zoo>

    <lion> ... </lion>

    <dog> ... </dog>

</zoo>


주요 속성은 다음과 같다.


1. 구현체는 제한이 없다. : 누구든지 주어진 인터페이스를 구현할 수 있다. 비록 다른 모듈 다른 사람에 의해 개발되더라도 그것들은 JAXBContext.newInstance 메소드에 제공되어져야 한다. 모든 장소에 있는 모든 구현체의 클래스가 리스트될 필요가 없다.

2. 각 인터페이스의 구현체는 유니크한 엘리먼트 이름을 가져야 한다.

3. 인터페이스의 모든 참조는 XmlElementRef를 가질 필요가 있다. 


Comments