Quel est l'équivalent en Java de la sérialisation XML de .NET ?
C'est vrai, JAXB est certainement la meilleure option !
Quel est l'équivalent en Java de la sérialisation XML de .NET ?
Réponse 2008 L'API Java "officielle" pour cela est maintenant JAXB - Java API for XML Binding. Voir Tutoriel par Oracle . L'implémentation de référence se trouve à http://jaxb.java.net/
Mise à jour de 2018 Notez que les modules Java EE et CORBA sont dépréciés dans SE dans JDK9 et seront supprimés de SE dans JDK11 . Par conséquent, pour utiliser JAXB, il faudra soit l'intégrer à votre environnement de classe d'entreprise existant, en le regroupant avec votre serveur d'applications, par exemple, soit l'introduire manuellement.
XStream est assez bon pour sérialiser un objet en XML sans beaucoup de configuration et d'argent ! (il est sous licence BSD).
Nous l'avons utilisé dans un de nos projets pour remplacer la bonne vieille java-serialization et cela a fonctionné presque immédiatement.
Très utile, il peut cependant avoir des problèmes sur les structures d'arbres complètes telles que JGraph avec des objets de nœuds qui ne sont pas des chaînes.
J'aime bien XStream. La seule chose que je ne comprends pas, c'est pourquoi un caractère est ajouté avant le véritable XML.
Vous pouvez consulter le Sérialisation XML simple projet. C'est ce que j'ai trouvé de plus proche de System.Xml.Serialization dans .Net.
C'est faux, je ne l'exige pas. Vous pouvez modifier le comportement par défaut et il n'utilisera que les champs présents.
Je soutiens de tout cœur "Simple" également. Je l'ai utilisé sur quelques projets avec beaucoup de succès. "Simple" est en effet beaucoup plus simple que JAXB. Il est le plus approprié lorsque vous avez des besoins relativement simples : Vous obtenez des objets qui doivent être écrits sur un support de stockage pour être ensuite réhydratés en tant qu'objets à nouveau. JAXB a beaucoup plus de fonctionnalités et de flexibilité, mais c'est une sorte de "80/20", la plupart du temps, dans la plupart des projets, vous n'avez besoin que du sous-ensemble simple de fonctionnalités.
JAXB fait partie de l'édition standard du JDK version 1.6+. Il s'agit donc FREE
et aucune bibliothèque supplémentaire à télécharger et à gérer. Un exemple simple peut être trouvé aquí
XStream semble être mort. La dernière mise à jour date du 6 décembre 2008. Simple
semble aussi facile et plus simple que JAXB mais je n'ai pas pu trouver d'informations sur les licences pour l'évaluer dans le cadre d'une utilisation en entreprise.
XStream n'est pas mort, il est juste mature et stable - ce qui signifie qu'il n'y a pas grand-chose à ajouter à la fonctionnalité de base. Il en va de même pour la mise en œuvre de référence de JAXB, qui n'a pas connu beaucoup d'activité au cours des deux dernières années.
Il convient de mentionner que depuis la version 1.4, Java dispose des classes java.beans.XMLEncoder et java.beans.XMLDecoder. Ces classes effectuent un encodage XML qui est au moins très comparable à la sérialisation XML et qui, dans certaines circonstances, pourrait faire l'affaire pour vous.
Si votre classe respecte la spécification JavaBeans pour ses getters et setters, cette méthode est simple à utiliser et vous n'avez pas besoin de schéma. Avec les réserves suivantes :
Par exemple, prenez la déclaration suivante :
public class NPair {
public NPair() { }
int number1 = 0;
int number2 = 0;
public void setNumber1(int value) { number1 = value;}
public int getNumber1() { return number1; }
public void setNumber2(int value) { number2 = value; }
public int getNumber2() {return number2;}
}
Exécution de ce code :
NPair fe = new NPair();
fe.setNumber1(12);
fe.setNumber2(13);
FileOutputStream fos1 = new FileOutputStream("d:\\ser.xml");
java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(fos1);
xe1.writeObject(fe);
xe1.close();
Le résultat serait le fichier suivant :
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_02" class="java.beans.XMLDecoder">
<object class="NPair">
<void property="number1">
<int>12</int>
</void>
<void property="number2">
<int>13</int>
</void>
</object>
</java>
Sachez que l'utilisation de java.beans.XMLDecoder
avec des données fournies par l'utilisateur peut introduire des vulnérabilités d'exécution de code arbitraire dans votre code.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
8 votes
Ah, le bon vieux temps où les questions d'une seule ligne comme celle-ci étaient les bienvenues sur SO. Tellement utile. Sans toutes ces bêtises de type "Qu'avez-vous essayé ?" ou "Donnez des détails" que les gens aiment lire aujourd'hui.