J'utilise JAXB pour la génération XML rapide et sale. J'ai une classe qui représente une structure arborescente:Existe-t-il un moyen de restreindre la profondeur de marshaling pour les graphiques d'objets dans JAXB?
@XmlRootElement(name = "element")
public class Element {
// [...]
@XmlElementWrapper(name="childs")
@XmlElementRef
public List<Element> getChilds() { /*...*/ }
}
Je souhaite limiter la profondeur à laquelle la collection enfant est rassemblée. Ainsi, par exemple je voudrais écrire juste les enfants directs de l'élément que j'envoie au Marshaller mais omettre leurs enfants.
Existe-t-il un moyen JAXB standard pour ce faire ou peut-être un rappel que je peux utiliser pour désactiver le marshaling d'une propriété à la volée?
J'ai déjà pensé à cela, mais je n'ai pas réussi à comprendre comment déclencher le triage JAXB des enfants depuis l'intérieur de l'adaptateur. Il n'y a pas d'accès au Marshaller via l'interface XmlAdapter, donc il semble que mes options sont: 1) pour en créer un nouveau, qui peut devenir un gros succès ou 2) avoir accès au Marshaller actuel - par exemple en utilisant un la classe de contexte ThreadLocal personnalisée - qui, je suppose, n'est pas sûre (ou même possible) car cela signifierait réutiliser le Marshaller pendant qu'un autre objet est encore en cours de traitement. – FRotthowe
Vous pouvez utiliser un pool de Marshallers et les réutiliser. Dans tous les cas, il n'y en aura pas plus de 2 utilisés à la fois car vous n'avez vraiment besoin que de 2 niveaux. –
Je vais essayer d'utiliser un pool de marshallers comme vous l'avez suggéré. Cela ne ressemble pas à une solution "propre", mais au moins il n'est pas nécessaire de modifier les classes du modèle. – FRotthowe