簡體   English   中英

嘗試使用 Spring Boot 2 啟動 gemfire 脈沖時出現 jackson cast 異常

[英]Getting jackson cast exception while trying to start gemfire pulse with spring boot 2

我創建了一個帶有 spring 關鍵 gemfire 的定位器應用程序。 根據文檔,我在啟動應用程序時設置了 GEODE_HOME。 當我嘗試從 gfsh 命令提示符連接時。 它試圖從 GEODE_HOME 部署脈沖並為 jackson 鑄造拋出以下錯誤。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter': Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]: Constructor threw exception; nested exception is java.lang.ClassCastException: class com.fasterxml.jackson.datatype.jdk8.Jdk8Module cannot be cast to class com.fasterxml.jackson.databind.Module (com.fasterxml.jackson.datatype.jdk8.Jdk8Module is in unnamed module of loader 'app'; com.fasterxml.jackson.databind.Module is in unnamed module of loader org.eclipse.jetty.webapp.WebAppClassLoader @18a3c727)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1160) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1104) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:481) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) ~[na:na]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:443) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:325) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:930) ~[jetty-server-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:553) ~[jetty-servlet-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:889) ~[jetty-server-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:356) ~[jetty-servlet-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1445) ~[jetty-webapp-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1409) ~[jetty-webapp-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:822) ~[jetty-server-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:275) ~[jetty-servlet-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:524) ~[jetty-webapp-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:72) ~[jetty-util-9.4.25.v20191220.jar:9.4.25.v20191220]
at org.apache.geode.internal.cache.HttpService.addWebApplication(HttpService.java:169) ~[geode-core-9.8.4.jar:na]
at org.apache.geode.management.internal.ManagementAgent.loadWebApplications(ManagementAgent.java:232) ~[geode-core-9.8.4.jar:na]
at org.apache.geode.management.internal.ManagementAgent.startAgent(ManagementAgent.java:127) ~[geode-core-9.8.4.jar:na]
at org.apache.geode.management.internal.SystemManagementService.startManager(SystemManagementService.java:432) ~[geode-core-9.8.4.jar:na]
at org.apache.geode.management.internal.JmxManagerLocator.findJmxManager(JmxManagerLocator.java:102) ~[geode-core-9.8.4.jar:na]
at org.apache.geode.management.internal.JmxManagerLocator.processRequest(JmxManagerLocator.java:52) ~[geode-core-9.8.4.jar:na]
at org.apache.geode.distributed.internal.InternalLocator$PrimaryHandler.processRequest(InternalLocator.java:1309) ~[geode-core-9.8.4.jar:na]
at org.apache.geode.distributed.internal.tcpserver.TcpServer.processOneConnection(TcpServer.java:475) ~[geode-core-9.8.4.jar:na]
at org.apache.geode.distributed.internal.tcpserver.TcpServer.lambda$processRequest$0(TcpServer.java:369) ~[geode-core-9.8.4.jar:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]: Constructor threw exception; nested exception is java.lang.ClassCastException: class com.fasterxml.jackson.datatype.jdk8.Jdk8Module cannot be cast to class com.fasterxml.jackson.databind.Module (com.fasterxml.jackson.datatype.jdk8.Jdk8Module is in unnamed module of loader 'app'; com.fasterxml.jackson.databind.Module is in unnamed module of loader org.eclipse.jetty.webapp.WebAppClassLoader @18a3c727)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:154) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1152) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
... 35 common frames omitted
Caused by: java.lang.ClassCastException: class com.fasterxml.jackson.datatype.jdk8.Jdk8Module cannot be cast to class com.fasterxml.jackson.databind.Module (com.fasterxml.jackson.datatype.jdk8.Jdk8Module is in unnamed module of loader 'app'; com.fasterxml.jackson.databind.Module is in unnamed module of loader org.eclipse.jetty.webapp.WebAppClassLoader @18a3c727)
at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.registerWellKnownModulesIfAvailable(Jackson2ObjectMapperBuilder.java:740) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.configure(Jackson2ObjectMapperBuilder.java:607) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.http.converter.json.Jackson2ObjectMapperBuilder.build(Jackson2ObjectMapperBuilder.java:590) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.<init>(MappingJackson2HttpMessageConverter.java:57) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter.<init>(AllEncompassingFormHttpMessageConverter.java:66) ~[spring-web-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.<init>(RequestMappingHandlerAdapter.java:204) ~[spring-webmvc-5.2.3.RELEASE.jar:5.2.3.RELEASE]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) ~[na:na]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
... 37 common frames omitted

這個問題應該在 Geode 1.11.0得到修復,並且被這個 Jira 覆蓋: https : 1.11.0

這是問題的一些背景和潛在的解決方法:(對“joda”的引用可以替換為“jdk8”)

當 webapp 啟動時,它使用 webapp 的類加載器加載com.fasterxml.jackson.databind.Module (這是一個抽象類)。 在某些時候,Spring 會嘗試加載各種 ObjectMappers Jackson2ObjectMapperBuilder.java#L772-L822 在這種情況下,它會在系統類路徑上找到 joda 模塊。 為了解析com.fasterxml.jackson.datatype.joda.JodaModule類(由系統類加載器),它還需要加載com.fasterxml.jackson.databind.Module ,然后它由系統類加載器加載。 但是,這意味着JodaModule與 webapp 加載的cfjdModule類不兼容; 導致異常。

只要所有必需的 jackson jar 都在系統類路徑上,解決方法就是從 webapp jar 中刪除所有 jackson jar。 例如: zip -d .../tools/Pulse/geode-pulse-1.10.0.war WEB-INF/lib/jackson\\*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM