weblogic部署问题,jackson.databind异常

pw9qyyiw  于 2021-07-12  发布在  Spark
关注(0)|答案(1)|浏览(659)

在weblogic12c服务器上部署基于java11、apachespark3.0.1和scala2.12.10的.war spring引导应用程序时,如何解决jackson数据绑定错误。即使在将jacksondatabindversion2.11.4maven依赖项添加到pom文件之后,我仍然会遇到这个部署错误。
ps:部署服务器上没有安装scala,因为在开发过程中编译成功
weblogic.application.moduleexception:com.fasterxml.jackson.databind.jsonmappingexception:scala模块2.11.4要求jackson数据绑定版本>=2.11.0和<2.12.0
请看下面的日志堆栈跟踪

com.fasterxml.jackson.databind.JsonMappingException: Scala module 2.11.4 requires Jackson Databind version >= 2.11.0 and < 2.12.0
    at com.fasterxml.jackson.module.scala.JacksonModule.setupModule(JacksonModule.scala:61)
    at com.fasterxml.jackson.module.scala.JacksonModule.setupModule$(JacksonModule.scala:46)
    at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:17)
    at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:751)
    at org.apache.spark.status.api.v1.JacksonMessageWriter.<init>(JacksonMessageWriter.scala:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1375)
    at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:272)
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:366)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487)
    at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:83)
    at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:71)
    at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154)
    at org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199)
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:122)
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2126)
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:116)
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:90)
    at org.glassfish.jersey.internal.inject.ProviderToService.apply(ProviderToService.java:58)
    at org.glassfish.jersey.internal.inject.ProviderToService.apply(ProviderToService.java:54)
    at jersey.repackaged.com.google.common.collect.Iterators$8.transform(Iterators.java:799)
    at jersey.repackaged.com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
    at java.util.AbstractCollection.addAll(AbstractCollection.java:343)
    at java.util.LinkedHashSet.<init>(LinkedHashSet.java:169)
    at jersey.repackaged.com.google.common.collect.Sets.newLinkedHashSet(Sets.java:325)
    at org.glassfish.jersey.internal.inject.Providers.getClasses(Providers.java:392)
    at org.glassfish.jersey.internal.inject.Providers.getCustomProviders(Providers.java:202)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.<init>(MessageBodyFactory.java:247)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1375)
    at org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:272)
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:366)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487)
    at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:83)
    at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:71)
    at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture$1.call(Cache.java:97)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.glassfish.hk2.utilities.cache.Cache$OriginThreadAwareFuture.run(Cache.java:154)
    at org.glassfish.hk2.utilities.cache.Cache.compute(Cache.java:199)
    at org.jvnet.hk2.internal.SingletonContext.findOrCreate(SingletonContext.java:122)
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2126)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:777)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.internalGetService(ServiceLocatorImpl.java:740)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:710)
    at org.glassfish.jersey.server.model.ComponentModelValidator.<init>(ComponentModelValidator.java:97)
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:549)
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184)
    at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350)
    at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:347)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:392)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369)
    at javax.servlet.GenericServlet.init(GenericServlet.java:244)
    at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:356)
    at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:307)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:344)
    at weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)
    at weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)
    at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)
    at weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:99)
    at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:87)
    at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:74)
    at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:57)
    at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:31)
    at weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:676)
    at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:615)
    at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:2072)
    at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:2049)
    at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1938)
    at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3191)
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1864)
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:919)
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360)
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:356)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:138)
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:78)
    at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:52)
    at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:752)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:262)
    at weblogic.application.internal.SingleModuleDeployment.activate(SingleModuleDeployment.java:52)
    at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:165)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:90)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:631)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:171)
    at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:121)
    at weblogic.deploy.internal.targetserver.operations.StartOperation.doCommit(StartOperation.java:151)
    at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:348)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:907)
    at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1468)
    at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:459)
    at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:181)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:217)
    at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:14)
    at weblogic.d>
ymdaylpp

ymdaylpp1#

当我将jersey版本从1.x升级到2.x时,我也遇到了同样的问题。
问题背后的技术原因:
如果你有 org.glassfish.jersey.media:jersey-media-json-jackson 在类路径中,然后jersey cdi注册 DefaultJacksonJaxbJsonProvider 用于json处理功能的资源,例如 MessageBodyReader, MessageBodyWriter . 因为 DefaultJacksonJaxbJsonProvider 初始化,底层注册scala模块 com.fasterxml.jackson.module.scala.DefaultScalaModule 导致 com.fasterxml.jackson.databind.JsonMappingException: Scala module 问题。
解决方案:
我们可以覆盖默认值 DefaultJacksonJaxbJsonProvider 具有以下步骤的功能:
将以下依赖项添加到类路径

compile group: 'com.fasterxml.jackson.jaxrs', name: 'jackson-jaxrs-json-provider', version: '2.11.1'

添加 com.fasterxml.jackson.jaxrs.json 包雷达下的泽西cdi资源扫描使用 jersey.config.server.provider.packages 如下所示

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>
        com.fasterxml.jackson.jaxrs.json
    <param-value>
</init-param>

由于web.xml中的上述声明, com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider 将作为jsonprovider注入,它将处理json处理功能,例如 MessageBodyReader, MessageBodyWriter 部分。
可选步骤:
拆下 org.glassfish.jersey.media:jersey-media-json-binding 依赖关系,如果在类路径中有
删除 com.fasterxml.jackson.module:jackson-module-scala_2.* 从类路径,或者如果它是作为传递依赖来的。例如,在我的用例中, com.fasterxml.jackson.module:jackson-module-scala_2.10 依赖关系作为可传递的依赖关系通过 com.wordnik:swagger-core_2.* 我升级了 com.wordnik 昂首阔步走向 io.springfox swagger 。
注:
此解决方案适用于任何应用程序服务器,如 Wildfly/JBOSS EAP/WebLogic/ Websphere 因为这个问题纯粹与 Jersey 2.x

相关问题