# Java > Gnral Java > Persistance des donnes >  [Dbutant(e)] Problme avec JaxB !

## garulfo2

Hello !
Je suis entrain de tester JAXB dans le cadre du boulot. Sur un fichier XML simple, c'est  dire avec un seul niveau d'info, tout va bien. Par contre si j'utilise un fichier xml un peu plus complexe avec par exemple une liste de personne, chacune definie par un nom, prnom et adresse comme cela


```

```

Je n'arrive pas  parcourir les donnes importes dans les objets Java. C'est une liste de personne (Vector) qu'il faut parcourir,  mais je n'arrive pas  savoir de quel type est chaque objet de la liste.

Y-a-t il qqu qui aurait deja fait ca et qui aurait un exemple ?

Merci d'avance !

----------


## benratti

D'apres ce que j'ai compris, ton probleme est en fait de connaitre la classe d'un objet quelconque ( Ton Vector contient des objets mais tu ne sais pas de quelle classe ils sont ) ... 

Tu peux fouiller du cote de la classe Object et voir par exemple qu'il y a une methode getClass() ... tu peux peut-etre t'en servir pour recuperer le nom de la classe


```
TonObjet.getClass&#40;&#41;.getName&#40;&#41;
```

Tu as alors le nom, tu peux donc te debrouiller comme ca... mais il existe peut etre d'autre methode un peu plus elegante, mais je n'ai pas d'autre idee.

----------


## garulfo2

En fait, en faisant un instanceof j'arrive a connaitre le nom de la classe mais elle est abstraite et je ne peux donc pas instancier d'objet de ce type. Le problme c'est que je ne trouve pas de classe cr par JAXB qui fairait un extends de cette classe et dont je pourrais instancier un objet.

Je dois dire que je comprends pas trs bien la logique de JAXB concernant la cration des classes et je ne trouve pas d'exemple utilisant des fichiers xml un tant soit peu plus complexes.

----------


## divxdede

essai ce schema pour generer le parseur



```

```

Ensuite utilise le unmarhaller pour lire ton fichier XML.
Le unmarshaller va te renvoyer l'objet correspondant  ton noeud root.

Sur ce noeud root tu auras la mthode getPers() qui renverra une List d'element Personne

sur les elements "Personne" tu auras les mthodes
 - String getFirstname();
 - String getLastname();
 - Adresse getAdresse();

et sur l'objet Adresse tu auras
 - getStreet();
 - getZip();
 - getCity();

Pour connaitre le type du noeud root et ainsi de suite, genere la JAVADOC sur les classes de data binding gnre par la compilation de ton schema XSD. La javadoc est assez clair et adapt au parseur.

Sbastien.

----------


## garulfo2

Merci pour cette rponse.
C'est exactement ce que j'ai fait mais les objets de la liste sont la classe Personne qui, me dit le compilateur, est abstraite. Donc je ne peux pas instancier un objet pour rcuprer le contenu de la liste. Je comprends pas trs bien pourquoi c'est abstrait d'ailleurs. Voici mon code:



```

```

Si tu as une ide je prends avec plaisir  ::): 


////////////////////////////////////////////

Je confirme: aprs avoir essay ton xsd, la classe personne est abstraite, je ne peux pas instancier d'objet pour lire le contenu de la liste retourne.
C'est l mon problme principal.

----------


## divxdede

Peut importe que la classe Personne soit abstraite, les objets ont t instanci par le unmarshaller en utilisant une implmentation quelquonque. pour pouvoir y acceder, il te suffit de caster les elements de ta liste dans ta classe Personne.

De plus, si tu veux creer des objets JAXB propre a ton parseur, tu ne peut le faire directement, tu doit utiliser une usine (Factory) cre par le parseur. Elle s'appelle ObjectFactory.



```

```

Tu n'a pas besoin d'instancier ta liste, de plus avec
liste_pers = employees.getPers();            
tu perds quoiqu'il errive la referencesut la liste que tu as creer avec la ligne List liste_pers = new Vector();

ton probleme ne vient pas de jaxb, mais d'un manque d'experience des collections java.

Cordialement.




> Merci pour cette rponse.
> C'est exactement ce que j'ai fait mais les objets de la liste sont la classe Personne qui, me dit le compilateur, est abstraite. Donc je ne peux pas instancier un objet pour rcuprer le contenu de la liste. Je comprends pas trs bien pourquoi c'est abstrait d'ailleurs. Voici mon code:
> 
> 
> 
> ```
> 
> ```
> 
> Si tu as une ide je prends avec plaisir

----------


## garulfo2

Tu as entirement raison !!!   ::sm::   ::sm::   ::sm::   ::hola::   ::hola::   ::hola::  

Parfait, merci ! Tout roule !   ::lahola::

----------

