2015-08-05 1 views
0

Quelle est la meilleure façon de convertir ce XML en objets Java?Comment convertir le XML suivant en objets Java en utilisant JAXB

<entity>   
    <customers id=2 other="data"> 
     <customer name="john">testData1</customer> 
     <customer name="jenny">testData2</customer> 
     <customer name="joe">testData3</customer> 
     <customer name="joanna">testData4</customer> 
    </customers> 
</entity> 

Est-il préférable d'utiliser un XMLAdapter personnalisé avec un HashMap pour convertir plusieurs lignes xml de <customer>?
Je ne suis pas sûr si le XMLAdapter est le cas d'utilisation approprié pour ce scénario. Toute idée serait appréciée.

+0

[Convert xml à l'objet en utilisant JAXB] (http://www.mkyong.com/java/jaxb-hello-world-example/) – JBaba

Répondre

0

Depuis l'imbrication est peu profonde, vous pourriez avoir l'entité, les classes de clients et ensuite utiliser ces annotations pour le mappage dans la classe d'entité:

@XmlElementWrapper(name="customers") 
@XmlElement(name="customer") 
public void setCustomers(List<Customer> customers) { 
    this.customers= customers; 
} 

Références: XmlElementWrapper

0

meilleur approche, à mon avis, serait d'écrire un fichier xsd pour valider contre votre xml. Vous pouvez l'utiliser pour générer vos classes Java en utilisant xjc qui est livré avec Java. Cela devrait vous y arriver.

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
     xmlns:NameOfNamespace="http://enter.your.namespace.here" 
     targetNamespace="http://enter.your.namespace.here" 
     attributeFormDefault="unqualified" 
     elementFormDefault="qualified"> 

    <complexType name="customer"> 
     <simpleContent> 
      <extension base="string"> 
       <attribute name="name"/> 
      </extension> 
     </simpleContent> 
    </complexType> 

    <complexType name="customers"> 
     <sequence> 
      <element name="customer" type="NameOfNamespace:customer"/> 
     </sequence> 
     <attribute name="id" type="positiveInteger"/> 
     <attribute name="other"/> 
    </complexType> 

    <complexType name="entity" > 
     <sequence> 
      <element name="customers" type="NameOfNamespace:customers" minOccurs="1" maxOccurs="1"/> 
     </sequence> 
    </complexType> 

    <element name="entity" type="NameOfNamespace:entity"/> 
</schema> 

Ouvrez une invite de commande dans le dossier où vous mettez votre fichier XSD, puis générer du code Java, vous aurez juste besoin de taper:

$ xjc nameOfSchemaFile.xsd 

en supposant que votre dossier java « bin » est ton chemin. Les classes générées seront créées dans un dossier portant le même nom que votre targetNamespace.

On peut de suivre les instructions dans l'exemple de Naimish JAXB Hello World Example