Je voudrais modifier le flux de sortie pour une opération de marshaling JAXB pour inclure du code XML arbitraire. Voici un exemple pour clarifier la situation.Comment puis-je modifier le flux de sortie de marshaling JAXB pour inclure du code XML arbitraire?
J'ai un objet de domaine Product
arbitraire avec annotations JAXB qui ressemblent actuellement comme ceci:
@XmlRootElement(name="Product")
public class Product {
@XmlElement(name="CommonProperty")
private String commonProperty="Something";
@XmlElement(name="ExtraXml")
private String extraXml="Something extra";
}
Ce qui serait typiquement maréchal en ceci:
<Product>
<CommonProperty>Something</CommonProperty>
<ExtraXml>Something else</ExtraXml>
</Product>
Maintenant, si le champ extraXml
contenait des XML supplémentaire (de complexité arbitraire) qui devait être inclus en ligne avec le résultat final marshalled?
Say, extraXml
contenait « <abc><def>Something extra</def></abc>
», je voudrais vraiment une solution qui m'a permis de maréchal Product
comme celui-ci (formatage en option):
<Product>
<CommonProperty>Something</CommonProperty>
<abc>
<def>Something extra</def>
</abc>
</Product>
Je l'ai regardé this related question mais il n'a pas tout à fait céder le résultat que je suis après, car il semble plus orienté vers un changement de format global plutôt que l'insertion DOM.
La propriété extraXml
est juste là pour l'illustration, elle peut être marquée comme @XmlTransient
ou dans une seule classe spécialisée. Le seul critère est qu'il peut en quelque sorte obtenir un String
contenant un contenu XML complètement arbitraire à ajouter à la sortie marshalled Product
.
Je devrais également mentionner que les consommateurs de la sortie de celui-ci sont en mesure d'analyser le contenu arbitraire d'une manière qui leur convient. Le but ici est de simplifier le traitement côté serveur.
Merci d'avance pour toute aide que vous pouvez offrir.
Sons prometteurs - pourriez-vous élaborer un peu? –
@Gary, j'ai mis à jour ma réponse pour expliquer comment cela peut être fait en utilisant @XmlAnyElement. –
+1 pour votre mise à jour majeure - c'est une aide précieuse (et félicitations pour avoir brisé 3K aujourd'hui). Il y a un dernier bout si cela ne vous dérange pas. Au début du marshalling, j'ai seulement le 'extraXml' comme une chaîne et une instance de' Product' créé par 'new Product()'. Existe-t-il un moyen de spécifier le nœud d'une manière que JAXB est heureux de rassembler? –