jboss - ClassCastException : MyFilter cannot be cast to javax. servlet.Filter

标签 jboss module classloader jboss7.x libraries

我正在将一个应用程序迁移到 JBoss 7,其中所有依赖项都在 "JBOSS_HOME/server/default/lib" 中(JBoss 4)。我包含了库 "servlet.jar" (javax.servlet.*),但是,在设置 Global Module for JBoss 7 之后(war 文件中的 modules.xml、standalone.xml、jboss-deployment-structure.xml),库由 JBoss 正常加载。

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

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类(class)。
  • 我想使用全局模块,因为我需要重用很多库。
  • 最佳答案

    您的类路径被多个不同版本的 javax.servlet.Filter 污染了类。类加载器 X 加载的类(例如负责容器内部类的类)与类加载器 Y 加载的类(例如负责 webapp 类的类)不同。

    I included the lib "servlet.jar" (javax.servlet.)


    这至少听起来不对。这应该已经由目标 servletcontainer(在您的情况下是 JBoss)提供。您绝对不应该在其 /WEB-INF/lib 中提供特定于 servletcontainer 的库和 webapp。文件夹。这只会导致运行时类路径灾难,因为它们的类加载优先于 servletcontainer 本身提供的类,因此与 servletcontainer 的内部类冲突,而后者又使用 servletcontainer 自己的类。
    /WEB-INF/lib 中删除特定于 servletcontainer 的库文件夹。
    这是初学者在尝试修复/规避 javax.servlet 上的编译错误时的常见错误。他们在 IDE 中面临的 API。它应该以不同的方式解决。至此,您需要告诉 IDE 将 Web 项目与给定的目标容器相关联。然后 IDE 将自动执行必要的构建路径魔术。
    也可以看看:
  • How do I import the javax.servlet API in my Eclipse project?
  • 关于jboss - ClassCastException : MyFilter cannot be cast to javax. servlet.Filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15119712/

    相关文章:

    jboss - Windows环境下Wildfly服务器无法启动

    python 模块和导入

    Java:如何将存储为 byte[] 的类加载到 JVM 中?

    scala - 动态加载后,A 类无法转换为 A 类

    java - Hibernate 保存(内部?)类变量

    java - 如何在不使用 jboss-client.jar 的情况下连接到 WildFly 10 嵌入式 Active-MQ Artemis Broker

    java - 如何在 Jboss 7 中部署 jboss seam 2.1.2

    java - 处理由 JPA 关系引起的循环引用的策略?

    node.js - NPM 包作为 self 的嵌套依赖

    java - 为什么这个 URLClassLoader 有时有效有时无效?