다음 사례를 작성했습니다. 모든 JAXBLists위한 인터페이스 :JAXB를 사용하여 목록 비 정렬 화/마샬링 <String> - 상속
public interface JaxbList<T> {
public abstract List<T> getList();
}
와 기본 구현 :
@XmlRootElement(name="list")
public class JaxbBaseList<T> implements JaxbList<T>{
protected List<T> list;
public JaxbBaseList(){}
public JaxbBaseList(List<T> list){
this.list=list;
}
@XmlElement(name="item")
public List<T> getList(){
return list;
}
}
뿐만 아니라 URI 목록의 구현 :
@XmlRootElement(name="uris")
public class JaxbUriList2 extends JaxbBaseList<String> {
public JaxbUriList2() { super(); }
public JaxbUriList2(List<String> list){
super(list);
}
@Override
@XmlElement(name="uri")
public List<String> getList() {
return list;
}
}
그리고이 목록을 사용하고 있습니다 다음과 같은 방법으로 :
public JaxbList<String> init(@QueryParam("amount") int amount){
List<String> entityList = new Vector<String>();
...
enityList.add("http://uri");
...
return new JaxbUriList2(entityList);
}
<uris>
<uri>
http://uri
</uri>
...
</uris>
를하지만이 같은 것입니다 :나는 출력해야한다 생각 나는 그것이 상속 함께 할 수있는 뭔가가 있다고 생각하지만, 나는 그것을 얻지 않는다
<uris>
<item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">
http://uri
</item>
...
<uri>
http://uri
</uri>
...
</uris>
...
무엇이 문제입니까? 어떻게 해결할 수 있습니까?
미리 감사드립니다.
문제는이다의 JaxbBaseList 언어 유형에 사용되어야한다 long, Integer, String 등으로 정의하고 다른 구현은 다른 유형에 사용해야한다고 정의합니다. 그래서 JaxbUriList2는 그냥 쓸모없는 예제 일 뿐더러 String 대신 URI를 사용하는 것이 좋습니다. @XmlSeeAlso 어노테이션이 필요하다. 그래서 두 클래스가 그대로 필요합니다. @XmlSeeAlso 주석 (즉, "@XmlSeeAlso (URI.class) 공용 클래스 JaxbUriList extends JaxbBaseList"을 사용하는 언어 유형 및 기타 모든 구현을위한 JaxbBaseList. –
gerry
EDIT에 관해서. 좋아, 그거야. 그러나 JaxbPrimitiveList에서만 @XmlElement (name = "item")를 제외하고 JaxbBaseList과 JaxbPrimitiveList 은 동일합니다. DRY 개념을 따르지 않습니다. 그래, 음, JaxbUriList가 아니라 중 하나; 그러나 내가 생각할 수있는 해결책이 없다. 내 질문에 "@XmlRootElement (name ="list ") 주석의 이름이 @XmlElement (name ="item ")가 아닌 @XmlElement가 대체되는 이유는 무엇입니까? 왜 목록이 두 번 추가됩니까? 'item'과 'uri'로 한 번? " –
gerry
나는 그것이 당신의 초기 질문에 대한 답이 아니라는 것을 알고 있습니다.나는 그저 반사 메커니즘인지 또는 결함이있는 JAXB인지 직접 판단하려했습니다. 귀하의 질문에 관해서 JAXB가 구현되는 방식이며, 따라서 대답은 "이것이 이와 같아서"와 같은 것일까 두려워합니다. 그러나 누군가 JAXB 구현의 이론적 근거 및/또는 불일치를 설명하는보다 설득력있는 답변을 제공 할 것입니다. – ewernli