Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenSessionInViewFilter无法转换为javax.servlet.Filter_Java_Spring_Hibernate_Servlet Filters_Open Session In View - Fatal编程技术网

OpenSessionInViewFilter无法转换为javax.servlet.Filter

OpenSessionInViewFilter无法转换为javax.servlet.Filter,java,spring,hibernate,servlet-filters,open-session-in-view,Java,Spring,Hibernate,Servlet Filters,Open Session In View,当我尝试在Tomcat7中启动JavaEESpring+Hibernate应用程序时,我遇到了一个异常。这曾经奏效,但我想我在迁移到Tomcat7时把事情搞砸了。例外是 Mar 29, 2013 11:38:33 PM org.apache.catalina.core.StandardContext filterStart SEVERE: Exception starting filter hibernateFilter java.lang.ClassCastException: org.spr

当我尝试在Tomcat7中启动JavaEESpring+Hibernate应用程序时,我遇到了一个异常。这曾经奏效,但我想我在迁移到Tomcat7时把事情搞砸了。例外是

Mar 29, 2013 11:38:33 PM org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter hibernateFilter
java.lang.ClassCastException: org.springframework.orm.hibernate3.support.OpenSessionInViewFilter cannot be cast to javax.servlet.Filter
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:248)
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:368)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4193)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4801)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:988)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:771)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:988)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:275)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:427)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:649)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:585)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:415)
Mar 29, 2013 11:38:33 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error filterStart
Mar 29, 2013 11:38:33 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/ImageWar] startup failed due to previous errors
我所有的Spring jar都是3.1.3.0版本,我有以下两个Hibernate依赖项:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.6.8.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.3.0.Final</version>
    </dependency>

知道为什么会出现这种异常吗?

听起来您在WEB-INF/lib中有一个servlet API版本。如果您使用的是maven,请找到有问题的依赖项,并确保将其依赖项排除到ServletAPI。mvn dependency:tree的输出有助于跟踪不需要的可传递依赖项

编辑:

如果一切看起来都是正确的,但您仍然会遇到这个问题,那么我用来找出类从何处加载的一种技术是:

Filter.class.getProtectionDomain().getCodeSource().getLocation()

它将为您提供类加载的jar/文件夹的位置。我还建议您尝试在独立的应用程序服务器中部署web应用程序,以排除IDE(例如服务器/部署插件)是问题的根源。

听起来您在web-INF/lib中有一个servlet API版本。如果您使用的是maven,请找到有问题的依赖项,并确保将其依赖项排除到ServletAPI。mvn dependency:tree的输出有助于跟踪不需要的可传递依赖项

编辑:

如果一切看起来都是正确的,但您仍然会遇到这个问题,那么我用来找出类从何处加载的一种技术是:

Filter.class.getProtectionDomain().getCodeSource().getLocation()

它将为您提供类加载的jar/文件夹的位置。我还建议您尝试将web应用程序部署在独立的应用程序服务器中,以排除IDE(例如服务器/部署插件)是问题的根源。

我想我不明白。OpenSessionInViewFilter是一个过滤器。我相信它应该依赖于javax.servlet.Filter类。是的,但是ServletAPI是由应用程序服务器提供的,不应该位于单个WEB应用程序的WEB-INF/lib中。因此,如果您使用的是maven,请确保ServletAPI依赖项提供了作用域。也就是说,我确实在Eclipse的服务器部署目录中找到了ServletAPI jar。我删除了它,但仍然得到相同的错误。也许它正在选择其他的过滤类,这就是它为什么抱怨的原因?谢谢你的见解。我知道你现在已经解决了这个问题,但要找出可传递依赖项的来源,mvn dependency:tree的输出可能会很有帮助。即使我找到了它们,我怎么才能阻止它们?我想我不明白。OpenSessionInViewFilter是一个过滤器。我相信它应该依赖于javax.servlet.Filter类。是的,但是ServletAPI是由应用程序服务器提供的,不应该位于单个WEB应用程序的WEB-INF/lib中。因此,如果您使用的是maven,请确保ServletAPI依赖项提供了作用域。也就是说,我确实在Eclipse的服务器部署目录中找到了ServletAPI jar。我删除了它,但仍然得到相同的错误。也许它正在选择其他的过滤类,这就是它为什么抱怨的原因?谢谢你的见解。我知道你现在已经解决了这个问题,但是为了找出可传递依赖项的来源,mvn dependency:tree的输出会很有帮助。即使我找到了它们,我该如何阻止它们?
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ ImageWar ---
[INFO] com.sodapopsoftware:ImageWar:war:0.0.1-SNAPSHOT
[INFO] +- javax.servlet:jstl:jar:1.2:provided
[INFO] +- javax.servlet:javax.servlet-api:jar:3.0.1:provided
[INFO] +- javax.servlet.jsp:javax.servlet.jsp-api:jar:2.2.1:provided
[INFO] +- javax.el:javax.el-api:jar:2.2.2:provided
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.6.4:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.6.4:compile
[INFO] |  \- log4j:log4j:jar:1.2.16:compile
[INFO] +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- commons-beanutils:commons-beanutils:jar:1.8.3:compile
[INFO] +- com.google.guava:guava:jar:13.0.1:compile
[INFO] +- org.imgscalr:imgscalr-lib:jar:4.2:compile
[INFO] +- taglibs:standard:jar:1.1.2:compile
[INFO] +- commons-fileupload:commons-fileupload:jar:1.2.2:compile
[INFO] +- org.apache.commons:commons-io:jar:1.3.2:compile
[INFO] +- junit:junit:jar:4.8.2:test
[INFO] +- org.easymock:easymock:jar:3.1:test
[INFO] |  +- cglib:cglib-nodep:jar:2.2.2:test
[INFO] |  \- org.objenesis:objenesis:jar:1.2:test
[INFO] +- org.springframework:spring-test:jar:3.1.3.RELEASE:compile
[INFO] +- org.springframework:spring-core:jar:3.1.3.RELEASE:compile
[INFO] |  \- org.springframework:spring-asm:jar:3.1.3.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:3.1.3.RELEASE:compile
[INFO] |  +- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  \- org.springframework:spring-beans:jar:3.1.3.RELEASE:compile
[INFO] +- org.springframework:spring-web:jar:3.1.3.RELEASE:compile
[INFO] |  \- org.springframework:spring-context:jar:3.1.3.RELEASE:compile
[INFO] +- org.springframework:spring-webmvc:jar:3.1.3.RELEASE:compile
[INFO] |  +- org.springframework:spring-context-support:jar:3.1.3.RELEASE:compile
[INFO] |  \- org.springframework:spring-expression:jar:3.1.3.RELEASE:compile
[INFO] +- org.springframework:spring-jdbc:jar:3.1.3.RELEASE:compile
[INFO] |  \- org.springframework:spring-tx:jar:3.1.3.RELEASE:compile
[INFO] +- org.springframework:spring-orm:jar:3.1.3.RELEASE:compile
[INFO] +- mysql:mysql-connector-java:jar:5.1.9:compile
[INFO] +- c3p0:c3p0:jar:0.9.1.1:compile
[INFO] +- org.hibernate:hibernate-core:jar:3.6.8.Final:compile
[INFO] |  +- antlr:antlr:jar:2.7.6:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.1:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  +- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile
[INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.1.Final:compile
[INFO] |  \- javax.transaction:jta:jar:1.1:compile
[INFO] +- org.hibernate:hibernate-validator:jar:4.3.0.Final:compile
[INFO] |  +- javax.validation:validation-api:jar:1.0.0.GA:compile
[INFO] |  \- org.jboss.logging:jboss-logging:jar:3.1.0.CR2:compile
[INFO] \- javassist:javassist:jar:3.12.1.GA:compile
Filter.class.getProtectionDomain().getCodeSource().getLocation()