[JAXB] La balise <![CDATA[]]>
Bonjour,
dans le cadre de mon stage, je dois utiliser JAXB pour générer des fichiers xml du type :
Code:
1 2 3 4 5 6
|
<racine>
<noeud>
<info><![CDATA[truc]]></info>
</noeud>
</racine> |
Il faut donc que toutes mes données soit encadré par des CDATA.
Or lorsque j'ajoute les CDATA en dur dans le code JAXB remplace les <![CDATA[truc]]> par <![CDATA[truc]]>.
J'ai vu sur la faq officiel de JAXB le message suivant :
Citation:
Q. How can I cause the Marshaller to generate CDATA blocks?
A. This functionality is not available from JAXB directly, but you can configure an Apache Xerces-J XMLSerializer to produce CDATA blocks. Please review the JaxbCDATASample.java sample app for more detail.
avec l'exemple ici.
Or il semblerai que toutes les classes de Xerces nécessaire soit deprecated... :cry:
Du coup impossible de tester. Quelqu'un a t'il déjà eu ce prob? svp
meme souci mais trouver solution
sorti :
<![CDATA[<xxxx>text</xxxx>]];
creer la class :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
public class EscapeHandler implements CharacterEscapeHandler {
public static final NoEscapeHandler Instance = new NoEscapeHandler();
private NoEscapeHandler() {
super();
}
@Override
public void escape(char[] buf, int start, int len, boolean isAttValue, Writer out) throws IOException {
for (int i = start; i < start + len; i++) {
out.write(buf[i]);
}
return;
}
} |
puis pour le marshaller un set Property :
Code:
1 2 3 4
|
CharacterEscapeHandler CharacterEscapeHandler = EscapeHandler.Instance;
marshaller.setProperty("com.sun.xml.internal.bind.marshaller.CharacterEscapeHandler", CharacterEscapeHandler );
marshaller.marshal(jaxb , stringWriter ); |
resultat :
<![CDATA[<xxxx>text</xxxx> ]];
voila !