通过Eclipse向WebLogic添加项目时遭遇SAXNotRecognizedException异常
解决WebLogic部署时SAXNotRecognizedException的方案
这个问题我之前在部署项目到WebLogic时也碰到过,本质是WebLogic自带的Oracle XML解析器和你项目引入的Xerces包发生了类加载冲突,给你几个实用的解决思路:
方案1:配置WebLogic优先使用应用类库
WebLogic默认会优先加载自身的类库,我们可以通过weblogic.xml强制让它优先使用项目里的Xerces包:
在项目的WEB-INF目录下创建或修改weblogic.xml,添加以下配置:
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"> <container-descriptor> <prefer-application-packages> <package-name>org.apache.xerces.*</package-name> <package-name>org.xml.sax.*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app>
这个配置会告诉WebLogic,优先从你的应用包中加载这些XML相关的类,而不是使用它内置的版本。
方案2:调整Maven依赖的Scope
既然WebLogic已经自带了XML解析器,你可以把项目中xercesImpl的依赖范围设为provided,这样打包时不会把这个包打进war/jar里,避免冲突:
<dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.9.1</version> <scope>provided</scope> </dependency>
这样本地CLI构建时没问题(如果本地环境需要的话),部署到WebLogic时就会使用服务器自带的解析器,不会触发兼容性问题。
方案3:升级Xerces到兼容版本
你当前用的Xerces 2.9.1版本比较老,和Oracle的JXSAXParserFactory兼容性不好。可以尝试升级到更稳定的版本,比如2.12.0或更高:
<dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.12.0</version> </dependency>
新版本修复了很多和不同XML解析器交互的兼容性问题,大概率能解决这个特性不识别的异常。
另外补充个小技巧:部署前可以在Eclipse里检查一下项目的Deployment Assembly配置,确保没有意外打包多余的XML解析相关依赖,避免不必要的冲突。
内容的提问来源于stack exchange,提问作者Lucian
相关产品推荐
相关产品推荐

