ClassCastException: MyFilter 不能转换为 javax.servlet.Filter [英] ClassCastException: MyFilter cannot be cast to javax.servlet.Filter

查看:22
本文介绍了ClassCastException: MyFilter 不能转换为 javax.servlet.Filter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将应用程序迁移到 JBoss 7,其中所有依赖项都在 "JBOSS_HOME/server/default/lib" (JBoss 4) 中.我包括了 lib "servlet.jar" (javax.servlet.*),但是,在设置了 JBoss 7 的全局模块(war 文件中的modules.xml、standalone.xml、jboss-deployment-structure.xml),JBoss 正常加载库.

I'm migrating an application to JBoss 7, where all dependencies were in "JBOSS_HOME/server/default/lib" (JBoss 4). I included the lib "servlet.jar" (javax.servlet. *), however, after setting a Global Module for JBoss 7 (modules.xml, standalone.xml, jboss-deployment-structure.xml in war files), libraries are loaded normally by JBoss.

当 JBoss 7 尝试启动过滤器时,出现以下异常:

When JBoss 7 tries to start the filters, I get following exception:

15:09:15,222 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/RegistrarValorDolar]] (MSC service thread 1-2) Exception starting filter cripto: java.lang.ClassCastException: cenpra.com.sigtec.business.utilities.SessionFilter cannot be cast to javax.servlet.Filter
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:441) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3269) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContext.start(StandardContext.java:3865) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:90) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.7.0_15]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.7.0_15]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.7.0_15]

尝试从全局模块中删除库servlet.jar",在尝试服务器使用内部 jar 加载它自己的类时,我得到了 javax.servlet 的 ClassNotFoundException.Filter 类.

Trying to remove the library "servlet.jar" from Global Modules, in a try that the server loads it's own classes using an internal jar, I got a ClassNotFoundExceptionof javax.servlet.Filter class.

  • 我想使用全局模块,因为我需要重用很多库.

推荐答案

您的类路径被多个不同版本的 javax.servlet.Filter 类污染.由类加载器 X 加载的类(例如,负责容器内部类的类)与由类加载器 Y 加载的类(例如,负责 web 应用程序的类)不是同一个类.

Your classpath is polluted with multiple different versioned javax.servlet.Filter classes. A class which is loaded by classloader X (e.g. the one responsible for container's internal classes) is not the same class when it's loaded by classloader Y (e.g. the one responsible for webapp's classes).

我包含了 libservlet.jar";(javax.servlet.)

这至少听起来不对.这应该已经由目标 servletcontainer(在您的情况下是 JBoss)提供.您绝对不应该在其 /WEB-INF/lib 文件夹中随 webapp 一起提供 servletcontainer 特定的库.这只会导致运行时类路径灾难,因为它们的类加载优先于 servletcontainer 本身提供的类,因此与 servletcontainer 的内部类冲突,而后者又使用 servletcontainer 自己的类.

This does at least not sound right. This is supposed to be already provided by the target servletcontainer (which is JBoss in your case). You should absolutely not provide servletcontainer-specific libraries along with the webapp in its /WEB-INF/lib folder. This would only end up in runtime classpath disaster because they get classloading precedence over the ones provided by the servletcontainer itself and thus conflicts with servletcontainer's internal classes which are in turn using servletcontainer's own classes.

删除 /WEB-INF/lib 文件夹中特定于 servletcontainer 的库.

Get rid of servletcontainer-specific libraries in /WEB-INF/lib folder.

这是他们在 IDE 中遇到的 javax.servlet API 上粗心尝试修复/规避编译错误时的常见错误.它应该以不同的方式解决.至此,您需要告诉 IDE 将 Web 项目与给定的目标容器相关联.然后 IDE 将自动执行必要的构建路径魔术.

This is a common starter's mistake in a careless attempt to fix/circumvent compilation errors on javax.servlet API which they face in their IDE. It should have been solved differently. To the point, you need to tell the IDE to associate the web project with the given target container. The IDE will then automatically do the necessary build path magic.

这篇关于ClassCastException: MyFilter 不能转换为 javax.servlet.Filter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆