Bonjour,

Dans une application, je crée un document XML (org.w3c.dom.Document).

Un utilisateur de mon application a rentré une chaîne de caractère qui comprenait une apostrophe encodée "bizarrement". Le résultat est que je ne pouvais plus sérialiser ou transformer le document par après (-> Exception). J'avais une exception :

Caused by: java.lang.RuntimeException: Document XML : problème d'entrée/sortie
at be.uclouvain.doctorats.utils.xml.XmlDocument.serialize(XmlDocument.java:64)
at be.uclouvain.doctorats.utils.print.PrintXml.serialize(PrintXml.java:91)
at be.uclouvain.doctorats.action.PrintAction.doAction(PrintAction.java:66)
... 22 more
Caused by: java.io.IOException: The character '' is an invalid XML character
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.fatalError(BaseMarkupSerializer.java:1873)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.surrogates(BaseMarkupSerializer.java:1542)
at com.sun.org.apache.xml.internal.serialize.XMLSerializer.printText(XMLSerializer.java:1334)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.characters(BaseMarkupSerializer.java:1383)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:1059)
at com.sun.org.apache.xml.internal.serialize.XMLSerializer.serializeElement(XMLSerializer.java:1089)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:1209)
at com.sun.org.apache.xml.internal.serialize.XMLSerializer.serializeElement(XMLSerializer.java:1089)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:1209)
at com.sun.org.apache.xml.internal.serialize.XMLSerializer.serializeElement(XMLSerializer.java:1089)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:1209)
at com.sun.org.apache.xml.internal.serialize.XMLSerializer.serializeElement(XMLSerializer.java:1089)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:1209)
at com.sun.org.apache.xml.internal.serialize.XMLSerializer.serializeElement(XMLSerializer.java:1089)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:1209)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.serializeNode(BaseMarkupSerializer.java:1277)
at com.sun.org.apache.xml.internal.serialize.BaseMarkupSerializer.serialize(BaseMarkupSerializer.java:489)
at be.uclouvain.doctorats.utils.xml.XmlDocument.serialize(XmlDocument.java:61)
... 24 more
Ce que je peux dire, c'est que c'est ce code qui introduisait le texte problématique :

document.createTextNode(text);

J'aurais pensé que createTextNode() devrait s'occuper de transformer n'importe quelle chaîne valide pour qu'elle puisse être mise dans le XML ???

Pour info, tout dans mon application est en UTF-8, sauf la db (latin-1), gérée par un autre département. Mais jusqu'ici, je ne pense pas avoir de problème de conversion (si ce n'est qu'on ne peut pas tout convertir).

Je suis inquiet, car je sais que le problème risque de se reproduire (résolu ici en changeant le titre manuellement).

Quelqu'un peut m'aider ?