我正在使用一个应用程序,我将xerces144.jar文件放在EAR文件内的war文件的WEB-INF / lib文件夹中。当我将此EAR文件部署到WebLogic Server并启动应用程序时,我收到以下异常。我们正在使用Spring MVC。但是,如果我仅使用WAR文件部署相同的应用程序,那么每件事都可以。我还注意到,如果我从EAR文件中删除了xerces144.jar文件并部署了EAR,那么它的部署没有任何问题。当这个xerces144.jar文件在WAR中被包含在与EAR中包含的相同WAR中并且已部署时,它有什么区别。
2009-10-27 21:05:50,468 ERROR - Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: Parser configuration exception parsing XML from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is javax.xml.parsers.ParserConfigurationException: Unable to validate using XSD: Your JAXP provider [org.apache.xerces.jaxp.Document BuilderFactoryImpl@19b5ed8] does not support XML Schema. Are you running on Java
1.4 with Apache Crimson? Upgrade to Apache Xerces (or Java 1.5) for full XSD support.
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadB
答案 0 :(得分:1)
当xerces144.jar文件包含在WAR与EAR中包含的相同WAR中并且已部署时,该文件有何不同。
我认为这与classloading有关。在EAR中部署WAR或部署相同的WAR时,Weblogic不会创建相同的类加载器层次结构。
最奇怪的部分是Weblogic 9.x在3rdparty.jar中附带了Xerces 1.4.4(至少,对于9.1来说这是正确的,检查9.2的版本会很有趣)。通过在命令行上运行以下命令可以轻松验证这一点:
$ java -cp 3rdparty.jar org.apache.xerces.framework.Version
说实话,我不知道究竟发生了什么以及在WAR中使用Xerces在EAR中部署WAR时实际上是什么问题。在你描述的所有场景中,我的理解是在类路径的某个地方有一个Xerces jar。
如果您真的想在WAR中部署Xerces-144.jar,您是否可以尝试在weblogic.xml
中设置prefer-web-inf-classes并测试此配置?
答案 1 :(得分:0)
由于weblogic确实有相同版本的xerces,我相信不需要将它打包到你的应用程序中