路由上的Camel流tokenizeXML给出org.xml.sax.SAXParseException:无效的XML字符(Unicode:0x0)

时间:2015-10-09 02:46:13

标签: xml apache-camel saxparser

在运行以流模式分析XML文件的路由时,我得到异常:引起:org.xml.sax.SAXParseException:在文档的元素内容中找到了无效的XML字符(Unicode:0x0)。

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

路由工作正常,但在某些文件中,在处理文件的过程中会抛出SAXParseException。我尝试设置Exchange属性FILTER_NON_XML_CHARS,但这似乎没有任何效果。

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

事实证明问题不是tokenizeXML("RECORD")方法,而是marshal().xmljson()

我使用此处描述的方法创建了一个剥离坏字符的处理器: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();

这解决了问题。在Camel中可能已经有了对此的支持,但我无法找到它。