Modifier l'en-tête XML produit par le JAXB marshaller
Je suis actuellement en utilisant le code suivant pour ranger un objet dans une chaîne xml
JAXBContext context;
try {
context = JAXBContext.newInstance(heartbeat.getClass());
StringWriter writer = new StringWriter();
Marshaller marshaller = context.createMarshaller();
heartbeat.setHeader(header);
heartbeat.setHeartbeatEvent(event);
marshaller.marshal(heartbeat, writer);
String stringXML = writer.toString();
return stringXML;
} catch (JAXBException e) {
throw new RuntimeException("Problems generating XML in specified "
+ "encoding, underlying problem is " + e.getMessage(),
e);
}
Qui produit l'en-tête suivant
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Ma sortie désirée est la suivante
<?xml version=\"1.0\"?>
En ajoutant à cela le marshaller
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE);
marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=\"1.0\"?>");
- Je recevoir
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><?xml version="1.0"?>
et la modification de la JAXB_FRAGMENT TRUE à la propriété supprime l'en-tête entièrement. J'ai été à la suite de la JAXB - Supprimer " standalone="yes" " de XML généré fil de tenter de résoudre le problème mais je n'ai pas eu de chance jusqu'à présent. Quelqu'un peut-il me donner un aperçu sur la façon d'obtenir mon choix d'en-tête de la JAXB marshaller?
OriginalL'auteur JME | 2013-08-26
Vous devez vous connecter pour publier un commentaire.
Lorsque le regroupement pour un
OutputStream
à l'aide d'une combinaison de ce qui suit produit les résultats attendus.Le problème que vous rencontrez se produit lorsque vous maréchal à un
Writer
, ce qui semble être un bug dans le JAXB l'implémentation de référence. Vous pouvez soulever un problème sur le lien ci-dessous:Vous pouvez toujours le faire:
EclipseLink JAXB (MOXy) prend également en charge la
com.sun.xml.bind.xmlHeaders
et il fonctionne correctement lorsque le regroupement pour unWriter
(je suis le MOXy plomb)PropertyException
lors de la configuration de lasun
de la propriété.Sur MOXy? Quelle version utilisez-vous?
Pas De MOxy. J'ai supposé que le bien a été utilisé avec Java mise en œuvre.
Je suis sur JDK 1.7.0_21 sur Windows. L'exception se produit à
at javax.xml.bind.helpers.AbstractMarshallerImpl.setProperty(Unknown Source)
etat com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.setProperty(Unknown Source)
. Ce n'est pas l'une des propriétés qu'il cherche.Daniel Hári proposé dans un montage qui, avec les nouvelles Jdk la propriété à définir est
"com.sun.xml.internal.bind.xmlHeaders"
.OriginalL'auteur Blaise Doughan
Cela a fonctionné pour moi
OriginalL'auteur Gopi Krishna