2013-07-04 2 views
0

XStream (XML에서 Java 객체로)을 사용하여 직렬화에 문제가 있습니다. 역 직렬화가 (목록으로 설정해야합니다)에 반복 요소를 제외하고 잘 작동XStream으로 직렬화 복원 - ArrayList가 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(); 

My 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<>(); 
    } 
} 
,363,210

그래서 문제는 당신은 ArrayList를 사용하기위한 클래스를 만들 필요가 당신의 도움이

답변

1

에 대한

감사합니다 (I가 XStream xs = new XStream(new PureJavaReflectionProvider());를 사용하는 경우 또는 비어 있음) 항상 널 (null)입니다 ... listePersonne의 ArrayList에서입니다 :

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

<DATA></DATA>도 분실해도됩니다. 같은 일이 this link

+0

감사에서 설명되어야한다,하지만 난 루트 요소를 무시하려고하면, 나는 예외 ('CannotResolveClassException : DATA')가, ''없이 할 수 없습니다. 그러나 당신의 도움으로 훨씬 나아졌습니다. 거의. 나는 지금 또 다른 문제가있다. 결과 (ListePersonne pojo = ('ListePersonne) xs.fromXML (xml);')를 복구하려고하면 캐스트가 작동하지 않습니다 ('vaudoiseLib.pojo.personne.ListePersonne은 vaudoiseLib.model.personne에 캐스트 할 수 없습니다. 인물). 내 XML ( ...) 때문에 아마도 그런 것 같지만 어떻게 해결할 수 있는지 모르겠다. – user2472508

+0

P. XML에서 "수동으로"데이터 루트 요소를 너무 삭제 해보십시오 (루트와 같은 ANNUAIRES를 사용합니다). 모든 것이 잘 작동합니다 ... 그러나 XML을 편집 할 수 없으므로이 작업과 관련이 있습니다. 어떤 생각이든 ... – user2472508

+0

다른 클래스 Data.class를 작성하십시오.이 클래스는 무엇입니까? 연금 인스턴스입니다. 사무실에있을 때의 실례를 보여 드리겠습니다. – TFT