2

I have created a Locator application with spring pivotal gemfire. As per documentation I have set the GEODE_HOME while starting my application. When I am trying to connect from gfsh command prompt. its trying to deploy pulse from GEODE_HOME and throwing the below error for jackson casting.

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
SUMIT
  • 540
  • 1
  • 4
  • 19

1 Answers1

2

This problem should be fixed in Geode 1.11.0 and is covered by this Jira: https://issues.apache.org/jira/browse/GEODE-7334.

Here is some background to the problem and a potential workaround: (references to 'joda' can be replaced by 'jdk8')

When the webapp starts up it loads com.fasterxml.jackson.databind.Module (which is an abstract class) using the webapp’s classloader. At some point Spring attempts to load various ObjectMappers Jackson2ObjectMapperBuilder.java#L772-L822. In this case it finds the joda module on the system classpath. In order to resolve the com.fasterxml.jackson.datatype.joda.JodaModule class (by the system classloader), it also needs to load the com.fasterxml.jackson.databind.Module which is then also loaded by system classloader. However, this means that the JodaModule is not compatible with the c.f.j.d.Module class loaded by the webapp; resulting in the exception.

As long as all the necessary jackson jars are on the system classpath, a workaround would be to remove all the jackson jars from the webapp jar. For example: zip -d .../tools/Pulse/geode-pulse-1.10.0.war WEB-INF/lib/jackson\*

Jens D
  • 4,229
  • 3
  • 16
  • 19
  • Thanks a lot @JensD ..it worked with zip -d .../tools/Pulse/geode-pulse-1.10.0.war WEB-INF/lib/jackson\*. As I am using pivotal gemfire , so I don't have control on the particular maven dependency because they are not using Geode 1.11.0. Pivotal gemfire uses there own internal implementation i.e io.pivotal.gemfire:geode-core:jar – SUMIT Feb 11 '20 at 06:21