2015-10-09 2 views
0

Lors de l'exécution d'une route qui analyse un fichier XML en mode de streaming, je reçois l'exception: Causée par: org.xml. sax.SAXParseException: un caractère XML non valide (Unicode: 0x0) a été trouvé dans le contenu de l'élément du document. La route fonctionne correctement mais sur certains fichiers, elle lève le SAXParseException à mi-chemin du traitement du fichier. J'ai essayé de définir la propriété d'échange FILTER_NON_XML_CHARS mais cela n'a pas semblé avoir d'effet.Camel streaming tokenizeXML sur les routes donne org.xml.sax.SAXParseException: Un caractère XML non valide (Unicode: 0x0)

Des idées sur la façon de résoudre ce problème?

Répondre

0

Il se trouve que le problème était pas avec la méthode tokenizeXML("RECORD") mais avec la marshal().xmljson()

J'ai créé un processeur pour dépouiller les mauvais caractères en utilisant la méthode décrite ici: http://blog.mark-mclaren.info/2007/02/invalid-xml-characters-when-valid-utf8_5873.html

from(routeUrl).routeId("FtpRuleId"+ftpRule.getId()) 
.setProperty("FILTER_NON_XML_CHARS", constant(true)) 
.split().tokenizeXML("RECORD").streaming() 
    .convertBodyTo(String.class) 
    .process(stripInvalidXmlProcessor) 
    .marshal().xmljson() 
    .process(recordProcessor) 
.end(); 

Cette résolu le problèmes. Il y a peut-être déjà un soutien pour Camel, mais je ne l'ai pas trouvé.