2017-10-17 128 views
0

一個團隊正在開發一個struts應用程序。團隊成員正在使用許多不同的操作系統。struts 2 Fedora上的TomCat中的NoSuchFieldError原型

我們使用的是Java 8.在那一刻,我使用1.8.0_152-B16,但我已經測試使用Java 8的多個版本,包括131和144

我目前使用Tomcat 23年8月5日,但也嘗試過8.0.20和9.0.1。

我安裝TomCat,解壓tar.gz版本,然後修改tomcat-users.xml文件。

通過放置WAR文件進行部署。

在Fedora 22和Fedora 26,我看到在本地主機日誌文件中出現以下錯誤:

17-Oct-2017 17:06:13.077 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [struts2] 
java.lang.NoSuchFieldError: PROTOTYPE 
    at org.apache.struts2.config.DefaultBeanSelectionProvider.register(DefaultBeanSelectionProvider.java:389) 
    at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:226) 
    at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67) 
    at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:897) 
    at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:437) 
    at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:478) 
    at org.apache.struts2.dispatcher.InitOperations.initDispatcher(InitOperations.java:75) 
    at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:63) 
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285) 
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:266) 
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108) 
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4591) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5233) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:988) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1860) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    at java.lang.Thread.run(Thread.java:748) 

web.xml文件如下:

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Struts 2 Web Application</display-name> 

    <filter> 
     <filter-name>struts2</filter-name> 
     <filter-class> 
      org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 
     </filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>struts2</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

我看到這個錯誤一臺舊版的Fedora 22電腦。然後我測試了一個新安裝的Fedora 26.奇怪的是,我可以將WAR文件放到CENTOS,Ubuntu和Windows 7上,沒有任何問題。我只在Fedora機器上看到這個錯誤。

我對struts瞭解不多,但我已經使用了很長時間的Java。

我瞭解NoSuchFieldError的含義,它讓我懷疑某些jar文件的版本不正確,但我覺得在Fedora上看到錯誤,但在其他一些操作上看起來很奇怪系統。

任何幫助診斷這個問題表示讚賞。

回答

1

看來/com/opensymphony/xwork2/inject/Scope.class已經比6月18日,2015年一老一在此日期DEFAULT重寫根據this commit變更爲PROTOTYPE但似乎一個類裝載舊的。

+0

所以現在我只需要弄清楚Fedora機器上的問題,而不是其他問題。謝謝! – Andrew

+0

@Andrew,是的,您可以使用'-XX:+ TraceClassLoading -XX:+ TraceClassUnloading' java選項:) –