微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog

用sax读xml文件时常会出现这个异常,一般上网可以看到的原因是:

1.BOM

在java中测试inputstream中是否有bom可以用apache commons IO 的org.apache.commons.io.input.BOMInputStream,如果你的项目有引入IO的情况下

BOM的基础知识可以参考:http://www.unicode.org/faq/utf_bom.html

也贴一个过滤BOM的小方法

private static InputStream checkForUtf8BOMAnddiscardIfAny(InputStream inputStream) throws IOException {
    pushbackinputstream pushbackinputstream = new pushbackinputstream(new BufferedInputStream(inputStream),3);
    byte[] bom = new byte[3];
    if (pushbackinputstream.read(bom) != -1) {
        if (!(bom[0] == (byte) 0xEF && bom[1] == (byte) 0xBB && bom[2] == (byte) 0xBF)) {
            pushbackinputstream.unread(bom);
        }
    }
    return pushbackinputstream; 
}


2.非良构的xml内容,例如在<?xml前出现非法的字符

可以采用正则从<?xml开始截取内容

3.今天我发现的是因为:Accept-Encoding启用了压缩传输,可以试着把Accept-Encoding设成:identity,同时也要注意是否采用Chunked Transfer Encoding(分段传输)


后话,有人说直接把流传给sax parser可以过滤掉。当然我用的sax,jaxp发现不会过滤掉。文档测试的环境:java 7 + xerces sax。全部异常栈

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
	at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(UnkNown Source)
	at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(UnkNown Source)
	at org.apache.xerces.impl.XMLErrorReporter.reportError(UnkNown Source)
	at org.apache.xerces.impl.XMLErrorReporter.reportError(UnkNown Source)
	at org.apache.xerces.impl.XMLErrorReporter.reportError(UnkNown Source)
	at org.apache.xerces.impl.XMLScanner.reportFatalError(UnkNown Source)
	at org.apache.xerces.impl.XMLDocumentScannerImpl$Prologdispatcher.dispatch(UnkNown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(UnkNown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(UnkNown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(UnkNown Source)
	at org.apache.xerces.parsers.XMLParser.parse(UnkNown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(UnkNown Source)
	at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(UnkNown Source)
	at org.apache.xerces.jaxp.SAXParserImpl.parse(UnkNown Source)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类