gpt4 book ai didi

java - Fedora 上 TomCat 中的 struts 2 NoSuchFieldError 原型(prototype)

转载 作者:行者123 更新时间:2023-12-02 12:07:23 26 4
gpt4 key购买 nike

一个团队正在开发 struts 应用程序。团队成员使用许多不同的操作系统。

我们使用的是 Java 8。目前,我使用的是 1.8.0_152-b16,但我已经使用多个版本的 java 8 进行了测试,包括 131 和 144。

我目前使用 TomCat 8.5.23,但也尝试过 8.0.20 和 9.0.1。

我通过解压 tar.gz 版本来安装 TomCat,然后修改 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 上看到错误,但在其他操作系统上看不到错误,这对我来说似乎很奇怪。

感谢您对诊断此问题的任何帮助。

最佳答案

似乎 /com/opensymphony/xwork2/inject/Scope.class 已被 2015 年 6 月 18 日之前的版本覆盖。此时 DEFAULT 已更改根据 this commitPROTOTYPE但似乎加载了一个较旧的类。

关于java - Fedora 上 TomCat 中的 struts 2 NoSuchFieldError 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46799532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com