Struts 2.5 ClassNotFoundException问题

时间:2017-02-07 15:40:11

标签: java struts2 websphere

我有一个Struts问题。我正在将Struts 1.2.x中的应用程序升级到2.5.8。我在部署到WebSphere 8.5的单个EAR文件中有一个war和多个EJB。每次我尝试通过Struts动作访问一个简单的hello world jsp时,我会在浏览器中获得这个堆栈跟踪:

Error Message: javax.servlet.ServletException: Filter [struts2]: could not be initialized
Error Code: 500
Target Servlet: com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor
Error Stack: 
Unable to load configuration. - bean - wsjar:file:/WEB-INF/lib/struts2-core-2.5.8.jar!/struts-default.xml:92:181 
     at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:499) 
     at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:75) 
     at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:63) 
     at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.init(FilterInstanceWrapper.java:145) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager._loadFilter(WebAppFilterManager.java:607) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.loadFilter(WebAppFilterManager.java:514) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterInstanceWrapper(WebAppFilterManager.java:319) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.getFilterChain(WebAppFilterManager.java:392) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:931) 
     at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1107) 
     at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3928) 
     at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) 
     at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1007) 
     at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817) 
     at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316) 
     at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:287) 
     at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 
     at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 
     at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) 
     at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
     at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
     at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
     at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
     at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
     at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
     at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1881) 
     Caused by: Unable to load configuration. - bean - wsjar:file/WEB-INF/lib/struts2-core-2.5.8.jar!/struts-default.xml:92:181 
     at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:70) 
     at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:906) 
     at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:445) 
     at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:486) 
     ... 28 more 
     Caused by: Unable to load bean: type:org.apache.struts2.dispatcher.multipart.MultiPartRequest class:org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest - bean - wsjar:file:/WEB-INF/lib/struts2-core-2.5.8.jar!/struts-default.xml:92:181 
     at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:271) 
     at org.apache.struts2.config.StrutsXmlConfigurationProvider.register(StrutsXmlConfigurationProvider.java:98) 
     at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:165) 
     at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67) 
     ... 31 more 
     Caused by: java.lang.NoClassDefFoundError: org.apache.commons.fileupload.FileUploadException 
     at java.lang.J9VMInternals.prepareClassImpl(Native Method) 
     at java.lang.J9VMInternals.prepare(J9VMInternals.java:283) 
     at java.lang.Class.getDeclaredConstructors(Class.java:721) 
     at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.register(XmlConfigurationProvider.java:263) 
     ... 34 more 
     Caused by: java.lang.ClassNotFoundException: org.apache.commons.fileupload.FileUploadException 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:600) 
     at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:243) 
     at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:786) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:764) 
     at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:134) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:741) 
     at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62) 
     at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58) 
     at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:585) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:741) 
     ... 38 more 

我已经验证了所需的commons-fileupload jar在战争中并且它不在共享库位置中会导致命名空间冲突。 Classloader设置首先设置为父级,由于项目的复杂性,我无法安全地更改它。

我需要做些什么来克服这个问题?

TIA 亚历

2 个答案:

答案 0 :(得分:0)

看起来我说得太早了。出于某种原因,我的第一次搜索未能在AppServer / plugins文件夹中找到旧版本的commons-fileupload。看起来这个jar正被app服务器使用,并且在使用父级第一个类加载时,发生了类冲突。所以现在我必须弄清楚如何解决这个问题,但最初的问题已经解决了。

答案 1 :(得分:0)

只要commons-fileupload jar中的类与您的应用程序或WAR类没有依赖关系,您就可以将此jar部署为独立的共享库,并将其与您的应用程序或WAR相关联,无论哪个依赖于jar 。隔离共享库的类加载语义在主题"隔离开源软件包"在WebSphere Application Server知识中心中,版本8.5.5和9.0。

如果您使用的是最新版本的8.5.5,那么您也可以尝试使用始终受保护的软件包,这也在"隔离开源软件包"中进行了描述。请注意,始终受保护的程序包可能会影响应用程序服