tomcat应用容器换weblogic应用容器遇到的坑:
Caused by: Error loading configuration file struts.xml - [unknown location]
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:147)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:110)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:168)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)
... 42 more
Caused by: unable to attain an URLClassLoader - [unknown location]
at com.opensymphony.xwork2.util.ClassPathFinder.findMatches(ClassPathFinder.java:80)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:940)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:143)
原因是struts.xml配置文件include里面的通配符*
有多少个文件就include多少个文件,不要采用通配符。
因为我跟踪了一下代码,发现报这个错误在于xwork的ClassPathFinder.findMatches方法里取得当前classloader的方式是ClassLoader loader = Thread.currentThread().getContextClassLoader();
在tomcat环境下取到的是URLClassloader的实例,而在weblogic下面却是weblogic.utils.classloaders.ChangeAwareClassLoader ,weblogic有自己的classLoader机制,因此导致了错误。
我觉得解决此类问题除非weblogic自身去解决,比如继承URLClassLoader等。
如果你自己尝试解决,即使解决了,可能也会出现这样那样的问题。因此,还是按照最普通的方式,老老实实的将所有的文件都一个一个include进来吧。