JAXB Fragment Marshal sans espace de noms
Je suis en utilisant le JAXB_FRAGMENT propriété de mon marshaller de maréchal à la WorkSet niveau. Le problème est que lorsque je le maréchal qu'il donne la WorkSet élément de l'attribut xmlns à chaque fois. Est-il un moyen de maréchal, afin de ne pas fixer l'attribut xmlns? Voici ce que mon XML ressemble.
<Import>
<WorkSets>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
..
...
</WorkSet>
<WorkSet xmlns="http://www.namespace.com">
<Work>
<Work>
...
</WorkSet>
</WorkSets>
</Import>
Voici le code que j'utilise le créer ci-dessus:
FileOutputStream fos = new FileOutputStream("import.xml");
XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(fos);
JAXBContext jc = JAXBContext.newInstance(WorkSet.class);
Marshaller m = jc.createMarshaler();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
writer.writeStartDocument();
writer.writeStartElement("Import");
writer.writeAttribute("xmlns","http://www.namespace.com");
writer.writeStartElement("WorkSets");
while(hasWorkSet){
m.marshal(workSet, writer)
}
writer.writeEndDocument();
writer.close();
source d'informationauteur TyC
Vous devez vous connecter pour publier un commentaire.
En supposant que vous voulez de l'espace de noms par défaut pour votre document à
http://www.namespace.com
vous pouvez effectuer les opérations suivantes:Démo
La
XMLStreamWriter.setDefaultNamespace(String)
etXMLStreamWriter.writeNamespace(String, String)
méthodes seront utilisées afin de définir et d'écrire l'espace de noms par défaut pour le document XML.WorkSet
Mon hypothèse, c'est que vous avez spécifié des informations d'espace de noms dans votre JAXB modèle.
Sortie
Ci-dessous est le résultat de l'exécution de la démo de code:
Il existe trois solutions de contournement pour ce.
1) Créer JAXB annoté des objets pour le conteneur de votre workersets. Ajouter le workersets de l'objet, puis maréchal de la chose entière.
2) Suivre le premier exemple dans 101 façons de maréchal des objets avec JAXB et l'utilisation
DocumentBuilderFactory
avec l'espace de noms courant.3) en Supposant que les jaxb objet est dans un package qui ne devrait jamais avoir qualifié les espaces de noms, vous pouvez ajouter les éléments suivants pour le paquet d'annotation: (note: il a été un moment depuis que j'ai fait et je havn'pas testé ce code)
Juste un autre exemple: