简体   繁体   English

转换为同一类时出现java.lang.ClassCastException-ClassLoader问题

[英]java.lang.ClassCastException when casting to the same class - ClassLoader issues

So, I using Hibernate and Spring MVC to build a webapp. 因此,我使用Hibernate和Spring MVC构建了一个Webapp。 I am been running a few queries on different tables and all work as intended, except for one table. 我一直在不同的表上运行一些查询,除一个表外,所有工作均按预期进行。 I am be looking into this problem for a while, and realized it is a problem related to two different Java class loaders loading the same class. 我正在研究这个问题一段时间,并意识到这是与两个不同的Java类加载器加载同一个类相关的问题。

I manage, in a way to fix the problem, by deploying the webapp it to a Tomcat server, but when I try to use Spring Boot, it simply doesn't work. 我通过将webapp部署到Tomcat服务器上来解决问题,但是,当我尝试使用Spring Boot时,它根本不起作用。 For now, I can continue developing, but I rather use Spring Boot and also, I feel like I am just ignoring an issue that could somehow affect me in the future. 现在,我可以继续开发,但是我更喜欢使用Spring Boot,而且,我觉得我只是忽略了将来可能以某种方式影响我的问题。 The method that is causing everything, goes as follow. 导致一切的方法如下。

public Usuario findById(String userId) {
    Session session = factory.getCurrentSession();
    Transaction tx = session.beginTransaction();
    try {
        return session.get(Usuario.class, userId);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    finally {
        tx.commit();
    }
}

Here is my detailed stack trace. 这是我详细的堆栈跟踪。

java.lang.ClassCastException: application.model.Usuario cannot be cast to application.model.Usuario
at application.core.user.dao.implementation.UserDaoImplementation.findById(UserDaoImplementation.java:35)
at application.core.user.service.implementation.UserServiceImplementation.findById(UserServiceImplementation.java:17)
at application.security.UserDetailsApp.loadUserByUsername(UserDetailsApp.java:34)
at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:114)
at org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:144)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174)
at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:94)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:212)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

Although, I already know what the issue is, I still can't find a solution anywhere. 尽管我已经知道问题出在哪里,但我仍然找不到任何解决方案。 I tried quite a few methods that I found, but to no avail. 我尝试了很多发现的方法,但均无济于事。 The error has not been fixed. 该错误尚未修复。 Please, let me know if you need more information. 请让我知道是否需要更多信息。

Update 更新资料

The following question getting ClassCastException when calling getSession().get() in Hibernate , although similar it didn't solve my problem. 以下问题在Hibernate中调用getSession()。get()时得到ClassCastException ,尽管类似,但不能解决我的问题。 What I am trying to achieve, is to be able to run it using Spring Boot. 我要实现的目标是能够使用Spring Boot运行它。 I managed to make it run in a Tomcat server, but Spring Boot just won't work. 我设法使其在Tomcat服务器上运行,但是Spring Boot不能正常工作。

Update #2 更新#2

After digging a bit more, I realized the problem was a result of using Spring Dev Tools. 经过更多的研究后,我意识到问题是使用Spring Dev Tools造成的。 After commenting out the maven dependency, the problem disappeared. 注释掉maven依赖项后,问题消失了。 Now, the problem is that I can't hot swap resources anymore. 现在,问题是我无法再热交换资源。 Has anyone faced an issue like this before? 有人遇到过这样的问题吗?

I got the same problem, just solved it by using the correct SessionFactory version, in my case that I updated the sessionFactory to: org.springframework.orm.hibernate4.LocalSessionFactoryBean from: org.springframework.orm.hibernate5.LocalSessionFactoryBean (I'm using hibernate5) 我遇到了同样的问题,只是通过使用正确的SessionFactory版本解决了它,在我的情况下,我将sessionFactory更新为: org.springframework.orm.hibernate4.LocalSessionFactoryBean从: org.springframework.orm.hibernate5.LocalSessionFactoryBean (我是使用hibernate5)

Hope that helps, 希望能有所帮助,

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用自定义类加载器时的java.lang.ClassCastException - java.lang.ClassCastException when using custom classloader 我的类加载器有什么问题? 投射到同一个类时出现 ClassCastException! - What is wrong with my classloader? ClassCastException when casting to the same class! java.lang.ClassCastException(无法将类转换为同一类) - java.lang.ClassCastException (Cannot cast class to same class) 强制转换java.lang.reflect.Method.invoke的对象结果时,java.lang.ClassCastException - java.lang.ClassCastException when casting Object-result of java.lang.reflect.Method.invoke 使用Data类填充TableView时java.lang.ClassCastException - java.lang.ClassCastException when Populating TableView with Data class 发生java.lang.ClassCastException时如何计算实际的类? - How to figure the actual class when java.lang.ClassCastException occurs? java.lang.ClassCastException一个类另一个 - java.lang.ClassCastException one class to other java.lang.ClassCastException 即使我将其转换为扩展的 class - java.lang.ClassCastException even though I am casting it to the extended class java.lang.ClassCastException - java.lang.ClassCastException java.lang.ClassCastException:强制转换EJB时抛出com.sun.proxy。$ Proxy - java.lang.ClassCastException: com.sun.proxy.$Proxy is thrown when casting an EJB
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM