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.
Jetzt muss ich nur herausfinden, woher das auf den Fedora-Maschinen kommt und nicht auf den anderen. Vielen Dank! – Andrew
@Andrew, ja, Sie können '-XX: + TraceClassLoading -XX: + TraceClassUnloading' Java-Optionen :) –