bar*_*ber 5 java tomcat xerces
我们有使用tomcat托管的多个java web应用程序.一些应用程序包括xercesImpl jar,其他应用程序不包括xercesImpl.jar.
为简单起见,假设我们只有两个应用程序:
两个应用程序在引导时都进行一些xml解析,并且仅使用java.*和javax.*(不直接导入org.apache.xerces).
如果xxx.war首先启动,而yyy.war在尝试解析xml时遇到错误,会发生什么:
Caused by: org.xml.sax.SAXException: SAX2 driver class org.apache.xerces.parsers.SAXParser not found
java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser
at org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java:230)
at org.xml.sax.helpers.XMLReaderFactory.createXMLReader(XMLReaderFactory.java:191)
at ca.icod.personne.adressePostale.RecuperateurFormat.createXMLReader(RecuperateurFormat.java:246)
at ca.icod.personne.adressePostale.RecuperateurFormat.parse(RecuperateurFormat.java:214)
... 127 more
Caused by: java.lang.ClassNotFoundException: org.apache.xerces.parsers.SAXParser
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1856)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1705)
at org.xml.sax.helpers.NewInstance.newInstance(NewInstance.java:82)
at org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java:228)
Run Code Online (Sandbox Code Playgroud)
当应用程序以相反的顺序启动时,启动时没有问题.我假设发生的是当xxx.war启动时,找到xercesImpl,因此读取内部的META-INF/services文件夹,因此xerces被标记为要在JVM中使用的xml实现.然后当yyy.war尝试点xml的东西时,JVM仍然认为它应该使用xerces但这次它不在类路径上:ClassNotFoundException
我们希望从我们的应用程序中逐步删除xerces,因为jdk的默认实现似乎可以完成这项工作.
但是我们几乎不能一次性删除xerces,也不能将托管xerces的webcat的tomcat服务器与托管xercesless webapps的托管服务器分开.
我是否想念一些奇怪的事情,或者有人在这里解决了类似问
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |