2012-10-22 7 views
4

파생 클래스에서 XMLAttribute를 마샬링하고 싶지만 문제가 있습니다.파생 클래스에서 XMLAttribute를 마샬링

내가 가지고있는 다음과 같은 2 개 파생 클래스 1 개 슈퍼 클래스 : 나는 몇 가지 데이터로 채워 목록을

public class Dog extends Animal { 

    @XmlAttribute(name = "type") 
    private String type; 

    @XmlElement 
    private String name; 
} 

public class Cat extends Animal { 

    @XmlAttribute(name = "type") 
    private String type; 

    @XmlElement 
    private String name; 
} 

@XmlSeeAlso({Dog.class, Cat.class}) 
public class Animal { 

} 

@XmlRootElement(name="some_element_wrapper") 
public SomeElementWrapper() { 

    List<Animal> listAnimal; 

    @XmlElement(name = "animals") 
    public List<Animal> getListAnimal() {} 
    public void setListAnimal(List<Animal> listAnimal) {} 
} 

가정하자. 내가 이렇게 내 수업에서 XML을 생성하려면 :

<some_element_wrapper> 
    <animals> 
     <animal type="dog">....</animal> 
     <animal type="cat">....</animal> 
    </animals> 
</some_element_wrapper> 

내 문제는 내가 type 속성을 제외하고 원하는 것을 얻을 수 있다는 것입니다. 나는 다른 해결책으로 시도했는데, 수퍼 클래스에서 속성 유형을 옮기거나 파생 된 유형 필드를 오버라이드했지만 아무런 결과도 얻지 못했습니다. 제발, 어떤 제안?

답변

1

JAXB (JSR-222) 구현이 자동으로 매핑 클래스의 서브 클래스를 인식하지 못합니다 서브 클래스

JAXBContext가 인식합니다. JAXBContext을 부트 스트랩하거나 또는 매핑 된 클래스 중 하나에서 @XmlSeeAlso 주석을 사용하는 데 사용되는 클래스 배열에 포함해야합니다.

@XmlSeeAlso(Dog.class, Cat.class) 
public class Animal { 

} 

상속 표시가

당신이 사용되는 하위 유형을 지정하는 유형 속성을 사용하고자하는 경우, 내가 그 일을 대신 상속이 표현되는 방식이다 이는 xsi:type 속성을 사용하지 않는 것이 좋습니다 XML (XML과 XML 스키마) 및 JAXB의 기본 표현

당신이 정말 xsi:type 속성을 사용하지 않으려면, 당신은 상속 지표로 type 속성을 사용하는 XmlAdapter을 활용할 수 있습니다.

EclipseLink JAXB (MOXy)

또한이 사용 사례 쉽게 (필자는 MOXY 리드 해요)를 만드는 확장 ( @XmlDescrinatorNode/ @XmlDescrimatorValue)를 제공합니다.

+1

감사 @Blaise. 이클립스 JAXB (MOXy)로 얻었습니다 ... 더 유용하고 실용적입니다. 내 노트를 올바른 노트로 업데이트했습니다. – mulp

관련 문제