2012-02-09 4 views
3

내 자신의 서브 클래스를 정렬 화되지 않으며,이 목록의 개체가, 그럼 내가 할 그런왜 JAXB 내가 성공적으로 정렬 화 할 수있는 JAXB 객체가

public class Sub extends SuperJAXBClass{ 

@Override 
public List getList1(){ 
//override here 
return ...; 
} 
} 

아래의 코드를 아래와 같이 같은 새로운 객체 : SuperJAXBClass sjc = new Sub(); marshall (sjc)

Sub에서 List1이 성공적으로 마샬링되지 않았 음을 발견했습니다. 왜 이런 일이 발생하는지 알고 있습니다. 어떻게 해결할 수 있습니까?

+0

JAXBConext는 어떻게 작성하고 있습니까? 다음은 도움이 될 수 있습니다 : http://blog.bdoughan.com/search/label/Inheritance –

+0

JAXBContext.newInstance (SuperJAXBClass.class); – user999377

답변

3

당신은 다음 중 하나를 수행 할 수 있습니다 :

옵션 # 1 - @XmlSeeAlso 주석

JAXB (JSR-222) 구현이 가능한 모든 suclasses를 결정하기 위해 자바 반사를 사용할 수 없습니다. 주위를 둘러싼 작업으로 서브 클래스에 대한 참조를 JAXB에 제공하는 @XmlSeeAlso 주석을 사용하여 수퍼 클래스에 주석을 달 수 있습니다.

@XmlSeeAlso({Sub.class}) 
public class SuperJAXBClass { 
} 

옵션 # 2 - JAXBContext에

를 만들 때 다음 JAXB 구현이 인식 될 JAXBContext을 만들 때 서브 클래스를 포함하는 경우 하위 클래스를 전달합니다. 수퍼 클래스에 대한 메타 데이터로 서브 클래스가 전달 될 때도 생성됩니다.

JAXBContext.newInstance(Sub.class); 
+0

디버깅 후 하위 클래스에 숨겨진 getList1 메서드가있는 동안 getList1 메서드가 있다는 것을 알았습니다.이 메서드는 슈퍼 클래스의 메서드라고 생각합니다. JAXB가 서브 클래스를 정렬 할 때마다 리턴 된 숨겨진 getList1 메소드는 비어있어, 정렬화할 수 없습니다. – user999377