2010-01-18 7 views
1

데이터베이스 대신 XML로 데이터를 저장하려는 자바 애플리케이션이 있습니다.JAXB 추상 클래스의 마샬링 arraylist

우리는 JAXB를 사용하기로 결정했으며 스키마를 기반으로 파일을 생성하는 대신 Java 파일에 주석을 추가했습니다.

우리가 다루는 문제는 Node라는 추상 클래스의 ArrayList가 있다는 것입니다. 노드에는 Module 또는 ScreenImage의 하위 클래스가 있습니다. arraylist를 마샬링 할 때 유형을 저장하지 않습니다. 예 :

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Module" 

JAXB는 추상 요소를 지원합니까?

언 마샬 할 수 있도록 JAXB에서 유형을 저장하려면 어떻게해야합니까?

답변

3

정상적으로 작동합니다. ModuleScreenImage이 바운드 클래스 (즉, JAXBContext.newInstance(...)에 지정된 클래스)에서 액세스 할 수있는 정적으로 이 아닌 경우 명시 적으로 바인딩해야합니다 (JAXBContext.newInstance(...) 매개 변수에 추가해야 함).

+0

. 나는 newInstance가 루트 요소에만 있다고 생각했습니다. 감사! – mdamman

7

axtavt 님의 제안에 감사합니다. 다른 접근법을 추가하고 싶습니다. @XmlSeeAlso를 사용하면 JAXBContext에 정의되고 표시되어야하는 다른 클래스를 선언 할 수 있습니다. JAXBContext가 이미 볼 수있는 클래스 내에서만 주석을 선언하면됩니다. 그 것이었다

예컨대 :

@XmlRootElement 
@XmlSeeAlso({Node.class, Module.class, ScreenImage.class}) 
class SomeContent { 
    private List<Node> nodes; 
    ///... accessors 
} 
관련 문제