JAXB java.util.Carte de paires clé-valeur
J'aimerais marshall/unmarshall une Carte dans les attributs d'un élément XML. J'ai vu des exemples comme:
<map>
<entry key="key1">value1</entry>
<entry key="key2">value2</entry>
</map>
Ce que je veux vraiment est:
<map key1="value1" key2="value2"/>
Assumer avec moi qu'il n'existe pas de valeurs complexes et qu'ils peuvent légalement être représentés comme des attributs XML. Aussi, je suis en train d'écrire de cette manière générique, parce que le jeu de clés n'est pas connu avant l'exécution.
Comment pourrais-je aller à ce sujet? Je suis familier avec XmlJavaTypeAdapter.
J'ai pensé à la création d'un MyMap qui contient une Liste d'entrées, mais ce ne serait pas obtenir le résultat que je voudrais.
OriginalL'auteur bmauter | 2012-10-15
Vous devez vous connecter pour publier un commentaire.
Comme je l'ai déjà évoqué dans mon commentaire, il ne peut être réalisé avec JAXB seul. Dans le JAXB spécification ( JSR 222 ), il est dit:
Qui signifie que la portée de la liaison est le même que le champ d'application du schéma, qui est statique. Un JAXB de liaison n'est pas destiné à être modifié sans avoir à recompiler le code. Il y a quelques exceptions, par exemple pour
xs:anyAttribute
ce qui est discuté dans l'article 6.9 de la spécification, mais puisque vous n'avez pas le droit de voter pour la réponse, ce qui suggère l'utilisation de@XmlAnyAttribute
vous ne voulez probablement pas à vivre avec les limites - par exempleQName
les clés de votre carte.J'espère que vous êtes convaincu que pour faire ce que vous voulez avec JAXB est une très mauvaise idée, mais juste pour la référence ci-dessous est un exemple qui modifie le document après le regroupement pour l'amener à la structure que vous souhaitez. Vous pouvez copier et coller dans un fichier unique et de le compiler avec Java 7. La sortie ressemble à ceci:
Mon code n'affiche que les marshalilng l'autre sens est équivalent:
Pas la structure, je suis à la recherche pour. Je veux toutes les entrées de la Carte des paires clé-valeur.
Les entrées dans le Java objet map ne sont pas affectés par la présente, par exemple, ils continuent de mettre en œuvre
java.util.Map.Entry
.MyEntry
est uniquement utilisé lors de la sérialisation. Ou voulez-vous dire à la sortie XML par "Pas la structure, je suis à la recherche d'"? Ou voulez-vous m'étendre l'exemple de travailler avec d'autres types et pas seulement<String, String>
?Si j'ai une carte avec les entrées suivantes: a=1, b=2, c=3, je veux le code XML à
<map a="1" b="2" c="3"/>
. En d'autres termes, les paires clé-valeur de la Carte-être des attributs XML. Tout ce que j'ai vu va à certains élaborer imbriquée structure de l'élément. Mes attributs seront toujours des choses simples comme des chaînes, des dates et des nombres.Ok, je missunderstood ce que tu voulais, mais je ne comprends maintenant. Le problème est que, avec votre exigence, il peut y avoir aucun mappage statique entre un Schéma XML et XML surveillée par JAXB. Par conséquent, il n'est pas possible avec JAXB seul. Cependant, il existe d'autres possibilités et je vais mettre à jour ma réponse quand j'ai le temps.
OriginalL'auteur Tilo
Cela ressemble à une utilisation pour
@XmlAnyAttribute
. Vous pouvez mettre une annotation sur unMap<QName, Object>
et il permettra de recueillir tous les attributs sont pas explicitement liés par d'autres annotations dans la carte.nice wrapper - mais il crée des nœuds de l'attribut n'est pas vrai nœuds.
OriginalL'auteur Ian Roberts