2017-10-17 1 views
0

Ein Team arbeitet an einer Struts-Anwendung. Teammitglieder verwenden viele verschiedene Betriebssysteme.Struts 2 NoSuchFieldError PROTOTYPE in TomCat unter Fedora

Wir verwenden Java 8. Im Moment bin ich mit 1.8.0_152-b16, aber ich habe mit mehreren Versionen von Java 8, 131 und 144

I TomCat 8.5.23 mit bin derzeit getestet , habe aber auch schon 8.0.20 und 9.0.1 ausprobiert.

Ich installiere TomCat, indem ich die tar.gz-Version entpacke und dann die tomcat-users.xml-Datei modifiziere.

Die Bereitstellung erfolgt durch Löschen der WAR-Datei.

auf Fedora 22 und Fedora 26, sehe ich die folgenden Fehler in der lokalen Host-Protokolldatei:

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) 

Die web.xml-Datei wird wie folgt dar:

<!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> 

ich diesen Fehler siehe ein älterer Fedora 22 Computer. Ich habe dann eine Neuinstallation von Fedora 26 getestet. Das Seltsame ist, dass ich die WAR-Datei problemlos auf ein CENTOS, Ubuntu und Windows 7 schreiben kann. Ich sehe diesen Fehler nur auf den Fedora-Rechnern.

Ich weiß nicht viel über Struts, aber ich habe Java für eine lange Zeit verwendet.

Ich verstehe die Auswirkungen der NoSuchFieldError, und es macht mich vermuten, dass eine falsche Version von einigen JAR-Datei verwendet wird, aber es scheint mir sehr seltsam, dass ich auf Fedora sehe ich den Fehler, aber nicht auf einige andere Betrieb System.

Jede Hilfe bei der Diagnose dieses Problems ist willkommen.

Antwort

1

Es scheint /com/opensymphony/xwork2/inject/Scope.class wurde von einer älteren als 18. Juni 2015. Zu diesem Zeitpunkt außer Kraft gesetzt wurde DEFAULT-PROTOTYPE nach this commit geändert wird, aber es scheint eine ältere eine Klasse geladen wird.

+0

Jetzt muss ich nur herausfinden, woher das auf den Fedora-Maschinen kommt und nicht auf den anderen. Vielen Dank! – Andrew

+0

@Andrew, ja, Sie können '-XX: + TraceClassLoading -XX: + TraceClassUnloading' Java-Optionen :) –