2017-02-07 3 views
0

У меня проблема Struts. Я обновляю приложение от Struts 1.2.x до 2.5.8. У меня есть одна война и несколько EJB в одном файле EAR, развертывающемся в WebSphere 8.5. Каждый раз, когда я пытаюсь получить доступ к простой привет мир JSP с помощью действия Struts, я получаю эту трассировку стека в браузере:Struts 2.5 ClassNotFoundException Проблема

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 фляга в войне, и это не в разделенное расположение библиотеки, которое может вызвать конфликты пространства имен. Classloader параметр сначала устанавливается на родительский, и из-за сложности проекта я не могу безопасно его изменить.

Что мне нужно сделать, чтобы пройти мимо этого?

ТИА Alex

ответ

0

Похоже, я говорил слишком рано. По какой-то причине мой первый поиск не смог запустить старую версию Commons-Fileupload в папке AppServer/plugins. Похоже, что этот баннер используется сервером приложений, а при использовании родительской загрузки первого класса происходит столкновение класса. Итак, теперь я должен выяснить, как обойти это, но исходная проблема решена.

+0

Хранилище с файловыми файлами в каталоге плагинов не должно быть видимым для приложений, поэтому, хотя это, безусловно, может быть связано с конфликтом (какой-то повторяющийся сценарий видимости), который не должен проявляться как исключение ClassNotFoundException. У вас есть вещи, упакованные как в области EAR, так и в вашем приложении? Похоже, что в стеке класса ClassNotFoundException есть только один загрузчик приложений (CompoundClassLoader), что подразумевает, что загрузка только прошла через EAR, а не WAR. – Jarid

0

До тех пор, пока классы в вашем хранилище common-fileupload не имеют зависимости от вашего приложения или классов WAR, вы можете развернуть эту банку как изолированную общую библиотеку и связать ее с вашим приложением или WAR, в зависимости от того, какая зависимость зависит от баночка. Семантика загрузки классов для изолированных разделяемых библиотек описана в разделе «Изоляция пакетов с открытым исходным кодом» в Центре знаний WebSphere Application Server для версий 8.5.5 и 9.0.

Если вы используете последнюю версию 8.5.5, можно также попробовать всегда защищенные пакеты, которые также описаны в «Разделительный пакеты с открытым исходным кодом ». Обратите внимание: всегда защищенные пакеты могут влиять на каждое приложение, запущенное на сервере приложений.

Смежные вопросы