2013-07-04 3 views
0

У меня проблема с десериализацией с помощью XStream (от XML до объекта java).Deserialization with XStream - ArrayList stay null

десериализации работает хорошо, для повторяемых элементов (которые должны превратиться в список), за исключением ...

Мой XML:

<DATA> 
    <ANNUAIRES> 
     <REC_ANNUAIRE> 
      <NOPERS>1815985</NOPERS> 
      <NOM>Dubois A. (Evilard)</NOM> 
      <LIGNEADR1>DUBOIS A.</LIGNEADR1> 
     </REC_ANNUAIRE> 
     <REC_ANNUAIRE> 
      <NOPERS>0229984</NOPERS> 
      <NOM>Dubois Abel (La Chaux-de-Fonds)</NOM> 
      <LIGNEADR1>DUBOIS ABEL</LIGNEADR1> 
     </REC_ANNUAIRE> 
     <REC_ANNUAIRE> 
      <NOPERS>0013717</NOPERS> 
      <NOM>Dubois Achim (Corpataux-Magnedens)</NOM> 
      <LIGNEADR1>DUBOIS ACHIM</LIGNEADR1> 
     </REC_ANNUAIRE> 
     <REC_ANNUAIRE> 
      <NOPERS>1602681</NOPERS> 
      <NOM>Dubois Adrienne (Orvin)</NOM> 
      <LIGNEADR1>DUBOIS ADRIENNE</LIGNEADR1> 
     </REC_ANNUAIRE> 
     <REC_ANNUAIRE> 
      <NOPERS>0384177</NOPERS> 
      <NOM>Dubois Agnes (Thun 7)</NOM> 
      <LIGNEADR1>DUBOIS AGNES</LIGNEADR1> 
     </REC_ANNUAIRE> 
     <REC_ANNUAIRE> 
      <NOPERS>1424276</NOPERS> 
      <NOM>Dubois Agnes (Bussigny-Lausanne)</NOM> 
      <LIGNEADR1>DUBOIS AGNES</LIGNEADR1> 
     </REC_ANNUAIRE> 
     <NBREC EOF="False">50</NBREC> 
     <DUREE_EXECSQL>0</DUREE_EXECSQL> 
     <DUREE_BUILDXML>0</DUREE_BUILDXML> 
    </ANNUAIRES> 
</DATA> 

Мой XStream Код:

XStream xs = new XStream(); 

xs.alias("DATA", PojoPersonne.class); 
xs.alias("REC_ANNUAIRE", Personne.class); 

xs.aliasField("ANNUAIRES", PojoPersonne.class, "annuaire"); 
xs.aliasField("NOPERS", Personne.class, "idPersonne"); 
xs.aliasField("NOM", Personne.class, "identite"); 
xs.aliasField("STATUS", PojoPersonne.class, "status"); 


xs.addImplicitCollection(PojoPersonne.class, "listePersonne"); 


PojoPersonne pojo = (PojoPersonne)xs.fromXML(xml); 
System.out.println(pojo); 
pojo.afficheListe(); 

Мой класс PojoPersonne:

public class PojoPersonne { 
    private String annuaire; 
    private List<Personne> listePersonne = new ArrayList<>(); 
    private String status; 

    public PojoPersonne(String annuaire, ArrayList<Personne> listePersonne, String status){ 
     this.annuaire = annuaire; 
     this.listePersonne = listePersonne; 
     this.status = status; 
    } 
    public PojoPersonne(){ 
     this.listePersonne = new ArrayList<>(); 
    } 
} 

Так что проблема с listePersonne ArrayList ... это всегда нуль (или пусто, если я использую XStream xs = new XStream(new PureJavaReflectionProvider());)

Спасибо за вашу помощь

ответ

1

Вам нужно создать класс для ArrayList и использования:

xstream.addImplicitCollection(Annuaries.class, "ANNUAIRES"); 

Также потерять <DATA></DATA> Вам это не нужно. Должно быть что-то вроде объяснено в this link

+0

Спасибо, но я не могу обойтись без '', если я пытаюсь игнорировать корневой элемент, у меня есть Exception ('CannotResolveClassException: DATA'). Но с вашей помощью это намного лучше ... Почти. У меня другая проблема. Когда я пытаюсь восстановить результат (ListePersonne pojo = ('ListePersonne) xs.fromXML (xml);'), приведение не работает ('vaudoiseLib.pojo.personne.ListePersonne не может быть перенесено в vaudoiseLib.model.personne. Personne'). Я думаю, что это возможно из-за моего XML (' ...'), но я не знаю, как я могу это решить ... – user2472508

+0

P.S. Я просто попробую слишком удалить корневой элемент DATA «вручную» из XML (поэтому я использую ANNUAIRES, как root), и все работает хорошо ... Но я не могу редактировать XML, поэтому я должен делать с этим .. :(У меня есть идея ... – user2472508

+0

Просто выполните другой класс Data.class. У этого класса есть какой-то экземпляр аннуитов. Я покажу вам рабочий пример, когда вернусь в офис. – TFT

 Смежные вопросы

  • Нет связанных вопросов^_^