2014-10-09 3 views
1

В теге <Images>this API call возвращает смесь разных типов: fanart, boxart, banner, screenshot, clearlogo.Разбор смешанного списка с SimpleXML

Использование SimpleXML Framework, как лучше всего разобрать их в отдельные списки? Я бы хотел List<FanArt>, List<BoxArt>, List<Banner> и т. Д. examples на сайте не похоже, чтобы покрыть эту ситуацию. Я искал несколько разных идей, но я даже не уверен, что SimpleXML Framework может справиться с этим прямолинейно.

Например, ниже бросает это исключение: org.simpleframework.xml.core.PersistenceException: Дублированный аннотацию название 'Изображения' на поле 'clearLogos' .....

@ElementList(name = "Images", entry = "clearlogo") 
private List<ClearLogo> clearLogos; 

@ElementList(name = "Images", entry = "boxart") 
private List<BoxArt> boxart; 

ответ

1

В случай, когда кто-то сталкивается с этим и нуждается в каком-то решении, я сделал это сейчас, чтобы заставить его работать. Работает, но это не совсем то, чем я был.

@Root 
public class Images { 

@ElementListUnion({ 
     @ElementList(entry = "fanart", type = FanArt.class, inline = true), 
     @ElementList(entry = "boxart", type = BoxArt.class, inline = true), 
     @ElementList(entry = "screenshot", type = ScreenShot.class, inline = true), 
     @ElementList(entry = "banner", type = Banner.class, inline = true), 
     @ElementList(entry = "clearlogo", type = ClearLogo.class, inline = true) 
}) 
private List<Object> images; 

private List<FanArt> fanarts; 

private List<BoxArt> boxarts; 

private List<ScreenShot> screenshots; 

private List<Banner> banners; 

private List<ClearLogo> clearlogos; 

public List<FanArt> getFanarts() { 
    if (fanarts == null) { 
     fanarts = new ArrayList<FanArt>(); 
     for (Object image : images) { 
      if (image instanceof FanArt) { 
       fanarts.add((FanArt) image); 
      } 
     } 
    } 
    return fanarts; 
} 

public List<BoxArt> getBoxarts() { 
    if (boxarts == null) { 
     boxarts = new ArrayList<BoxArt>(); 
     for (Object image : images) { 
      if (image instanceof BoxArt) { 
       boxarts.add((BoxArt) boxarts); 
      } 
     } 
    } 
    return boxarts; 
} 

public List<ScreenShot> getScreenshots() { 
    if (screenshots == null) { 
     screenshots = new ArrayList<ScreenShot>(); 
     for (Object image : images) { 
      if (image instanceof ScreenShot) { 
       screenshots.add((ScreenShot) image); 
      } 
     } 
    } 
    return screenshots; 
} 

public List<Banner> getBanners() { 
    if (banners == null) { 
     banners = new ArrayList<Banner>(); 
     for (Object image : images) { 
      if (image instanceof Banner) { 
       banners.add((Banner) image); 
      } 
     } 
    } 
    return banners; 
} 

public List<ClearLogo> getClearLogos() { 
    if (clearlogos == null) { 
     clearlogos = new ArrayList<ClearLogo>(); 
     for (Object image : images) { 
      if (image instanceof ClearLogo) { 
       clearlogos.add((ClearLogo) image); 
      } 
     } 
    } 
    return clearlogos; 
} 
}