com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser
问题
在使用 Spring+ibatis2的时候遇到的这个异常。从异常本身的提示信息来看,是配置文件解析器 com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser
缺少一个 parse(Ljava/io/InputStream;Ljava/util/Properties)
方法。但是需要的类我都已经引进来了,并且此前在 windows+tomcat,windows+weblogic下都跑通了,迁移到linux+weblogic的时候却出了问题。很纳闷。
分析
上网查了一圈。大多数说法是jar包引用错误,或者jar包冲突了。也有说法是 sqlmapconfig.xml文件的路径没有配置正确。按照后者的说法尝试了一下,没有用。想按照前者的说法来把ibatis-sqlmap- 2.jar换成ibatis-sqlmap.jar,却找不到这个jar包的下载。很犯愁。
解决
无奈之下回过头来看了一下ibatis-sqlmap-2.jar里面的方法,只有 parse(Reader)和parse(Reader,Properties)两个方法,确实没有 parse(InputStream,Properties)的方法。可是哪个jar包里有合适的类实现呢?
无意之中在百度某条目里发现了。ibatis的各个jar包,如 ibatis_common.jar,ibatis-dao.jar,ibatis-sqlmap.jar等,在ibatis2.3.x以前是分成了好几 个jar包,使用时分别加入的;在2.3.x版本以后则整合成了一个包,ibatis-2.3.x.jar。于是在自己的classpath下找到了这个 包,打开看了一眼,parse(InputStream,Properties)在里面躺着呢。
nosuchmethoderror:com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.paras(Ljava/io /InputStream;Ljava/util/Properties)的原因就很清楚了。在linux+weblogic下,服务器加载的jar包是 ibatis-sqlmap-2.jar,当然找不到需要的方法。把这个包删掉,问题就顺利解决了。
以后吸取教训,jar包应该按需引用,别有的没的都加进来。不仅使工程体积变大,而且jar包 的版本也可能带来种种问题。