J'ai un schéma qui définit les valeurs par défaut des éléments et des attributs. J'essaie d'analyser un document à l'aide de JAXB en fonction de ce schéma, mais JAXB ne définit pas les valeurs par défaut. Toute idée sur la façon de rendre Jaxb Honorez les valeurs par défaut du schéma?
exemple.xsd: p> p> exemple1.xml P> exemple > package test;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="child")
public class ChildEl {
private String attr;
private String childVal;
public ChildEl() {};
@XmlAttribute
public String getAttr() {
return attr;
}
public void setAttr(String pAttr) {
this.attr = pAttr;
}
public String getChildVal() {
return childVal;
}
public void setChildVal(String pVal) {
this.childVal = pVal;
}
}
3 Réponses :
Pour obtenir la valeur par défaut sur la propriété Element Vous devez l'annoter comme suit: p> Si vous utilisez Eclipselink Jaxb (Moxy) Vous obtiendrez la valeur d'attribut par défaut à l'aide du code que vous avez fourni. Il peut y avoir un bogue dans la mise en œuvre du métro de JAXB qui empêche de travailler. Remarque que je dirige la mise en œuvre des moxy. P> Le code suivant doit fonctionner avec n'importe quelle mise en œuvre JAXB sans nécessiter de modification de code de code de votre modèle . Vous pouvez faire ce qui suit et tirer parti de saxessource: p>
Je trouve ce que vous essayez de faire comme sensible, surtout d'harmonie avec des éléments d'attribut vs simples. Cela me semble étrange, mais il semble que les implémentations Jaxb2 choisissent d'ajouter un ensemble d'extensions supplémentaires que vous devez ajouter pour obtenir le comportement souhaité. Voir:
(j'aurais plutôt vu plus de comportements et de consistance par défaut entre les attributs et les éléments d'au moins de simples types - sans avoir à enregistrer un plugin. ensuite fournir un plug-in pour des cas spéciaux. Mes seuls gars sur la raison pour laquelle cela n'a pas été fait était ou une compatibilité en arrière - une supposition.) Em> p> Le plug-in de la valeur par défaut JAXB2-COMMONS fait référence à des commandes supplémentaires (et de pots) que vous ajoutez à XJC qui ajoute à son tour les comportements par défaut sur le champ. Dans mon cas: p> (où, bien sûr, la vérification nulle conditionnelle présente la valeur par défaut ou non.) Em> p> Utiliser Blaise Dumdan semble être un travail pratique autour. Selon la nature de votre DOC XML, cela peut être parfait. P> Pourtant, il semble que ce plug-in de valeur par défaut puisse déplacer la solution au processus de construction et ne pas voir une modification de votre code (en supposant que vous utilisiez un DOM par opposition à la SAX Parser Blaise suggérée). P> Il semble que le plug-in à valeur par défaut résolvez le problème et offre éventuellement une extensibilité supplémentaire (n'a pas besoin de cette personnalisation avancée) dans l'événement improbable que vous souhaitez encore plus de contrôle de valeur par défaut programmable exécutant XJC. P> Voici un extrait de configuration Maven au cas où il aide: p>
Une autre façon pour le réglage de la valeur par défaut peut être une fonction Beforemarshal (Marshaller Marshaller):