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

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

问题描述

我正在将应用程序迁移到JBoss 7,其中所有依赖项都在"JBOSS_HOME/server/default/lib"(JBoss 4)中.在设置"servlet.jar"(javax.servlet.*). ="nofollow"> 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加载它自己的类,我得到了ClassNotFoundExceptionjavax.servlet.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加载的类(例如,负责webapp的类的)时不是同一类.

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).

我包括了lib"servlet.jar"(javax.servlet.)

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

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文件夹中特定于servlet容器的库.

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天全站免登陆