La façon de traiter avec des caractères non valides dans un WS de sortie lors de l'utilisation de CXF?
Je suis en utilisant le Printemps, CXF et Hibernate pour construire un Service web qui effectuent des requêtes de recherche sur une base de données que j'ai un accès en lecture seule.
Le problème est que certaines entrées dans la base de données ont des caractères étranges (0x2) dans les champs de texte, et il semble que CXF ou à la bibliothèque (Aegis?) qu'il utilise pour/sérialiser les objets renvoyés à partir de la session Hibernate ne peut pas traiter avec elle:
org.apache.cxf.aegis.DatabindingException: Error writing document.. Nested exception is com.ctc.wstx.exc.WstxIOException: Invalid white space character (0x2) in text to output (in xml 1.1, could output as a character entity)
Comment puis-je obtenir autour de qui?
Idéalement, je pourrais juste supprimer ces personnages, car ils n'ont pas d'importance pour ma sortie...
Merci!
Vous devez vous connecter pour publier un commentaire.
source: http://www.theplancollection.com/house-plan-related-articles/hexadecimal-value-invalid-characterheplancollection.com/house-plan-related-articles/hexadecimal-value-invalid-character
Je ne suis pas sûr que cela répond à votre question, mais voici ce que j'ai trouvé.
Ici est la classe qui lève l'exception:
http://svn.codehaus.org/woodstox/wstx/trunk/src/java/com/ctc/wstx/api/InvalidCharHandler.java
Semble qu'il y est une discussion sur la question ici: http://comments.gmane.org/gmane.comp.apache.cxf.user/4373
Peut-être cela peut vous pouvez:
Vous pouvez également définir une "désactiver.outputstream.l'optimisation de la propriété" sur la
point de terminaison de bus/à vrai pour l'avoir désactiver l'écriture directe à l'outputstream
et toujours passer par le XMLStreamWriter. Devrait faire la même chose
sans la surcharge d'avoir la SAAJModel créé.
Espère que cela aide un peu.
Pour obtenir le comportement désiré et éviter les exceptions étant levée, vous aurez à étendre la valeur par défaut Woodstoks usine
com.ctc.wstx.stax.WstxOutputFactory
avec votre propre, c'est censé pour remplacer la propriétécom.ctc.wstx.outputInvalidCharHandler
avec une instance decom.ctc.wstx.api.InvalidCharHandler.ReplacingHandler
. Cette fonction prend comme argument du constructeur le remplacement char aux invalides. Avec votre instance en main, créez un fichier nomméMETA-INF/services/javax.xml.stream.XMLOutputFactory
et les placer à l'intérieur seulement le nom complet de votre mise en œuvre (assurez-vous qu'il va être placé à l'intérieur de la META-INF/services de répertoire dans le bocal).Vous pouvez trouver plus de détails ici.
HTH!
Le top-rated réponse n'a pas fonctionné pour moi, comme le codage Unicode a été rejetée. Avec une légère altération cependant, il apparaît que le comportement souhaité: