原文出处:http://blog.chenlb.com/2010/11/abstract-method-error-xerces.html
前天项目用 jetty 启动,打开 solr 的管理主页,出现 java.lang.AbstractMethodError: org.apache.xerces.dom.DeferredDocumentImpl.setDocumentURI(Ljava/lang/String;)V 真受不了(之前还好端端的)。项目不用小型的 web 容器,很杯具。服务器用的是 jboss。
找了很多资料(有很多邮件列表打不开,gfw?),有一两篇可靠:ParserUtils 从 Web 应用程序拾取解析器,Sun Java System Application Server Platform Edition 9 Release Notes 基本是同一篇。
说,可以用在jvm 启动时加以下参数:
- -Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
也可以删除 WEB-INF/lib 中的 org.apache.xerces 包。我的项目里有 xerces-1.4.4.jar,xercesImpl-2.9.X.jar。删除 pom.xml 的 xercesImpl 依赖,还出现 xercesImpl-2.8.1.jar,唉,但不会出现上面的问题了。xerces 没使用过。
思考:java 平台开源的包太多,依赖乱,冲突多。
转者注:MyEclipse中采用,Windows-->Preferences-->Install JREs,选择你安装的JDK,设置以下参数即可。
另外伴随这种情况发生的还有xmlwsdl包的冲突问题,情形与此类似,一般是因为包依赖中有多个wsdl包的缘故,你查找一下,把其中的老版本删除即可。