MyBatis运行时报错“前言中不允许有内容”的解决办法

使用MyBatis写的程序报错:

org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause:
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。
at …

看到报错信息中有句中文给高兴得…“前言中不允许有内容”,但是然并卵啊,不明白什么意思…

由于当时没有网,所以没查,不过估计是配置文件的错误(当时使用MyBatis提供的读取文件流的方法Resources.getResourceAsReader()),接着就将配置文件检查了一遍又一遍,还是没有找到错误,就在要放弃的时候,莫名其妙的发现主配置文件的开头有三个问号(“???”),可是Eclipse中却看不到这3个问号!!!

然后突然就想到了UTF-8+BOM,查看文件编码,果然是UTF-8+BOM,我去,怪不得会提示“前言中不允许有内容”…原来就是那个坑爹的BOM!!!

这里插一句,不严谨的解释下什么是BOM。BOM这玩意儿是微软搞出来的一个东西,为了明确区分UTF-8和ASCII等其他编码,所以微软在UTF-8的编码文件前会加上U+FEFF,就是所谓的BOM,但是关键是其他的系统不识别这个玩意儿,就只有微软的那套东西才认,这就坑爹了,所以在MyBatis中会报错误,认为前言中有内容…

于是果断用EditPlus把配置文件改成了UTF-8的格式,然后就运行正常了。

所以,小伙伴们需要注意,文件保存成UTF-8就好,如果出现莫名其妙的错误就检查下文件编码是不是有那个蛋疼的BOM,另外,如果保存成了BOM,网页文件什么的也可能在显示时开头多出一个不知哪里来的“?”…

2016.03.08补充:

Eclipse报错是中文的,MyEclipse报错是英文的,主要的错误信息就是:
Content is not allowed in prolog.

翻译过来也就是说prolog(开端)不允许有content(内容)…也就是上面说的原因,那个可恶的BOM,改一下就好了!

本文《MyBatis运行时报错“前言中不允许有内容”的解决办法》来自 www.juwends.com ,欢迎转载或CV操作,但请注明出处,谢谢!