micronaut-projects / micronaut-aws

Projects specific to integrating Micronaut and Amazon Web Services (AWS)
Apache License 2.0
85 stars 79 forks source link

Support for micronaut-serde-processor #1328

Open ketanonline opened 2 years ago

ketanonline commented 2 years ago

Issue description

Aws-common module doesn't support micronaut-serde-processor when running on EC2.

Impact: Application can not use micronaut-serde-processor in conjuction with micronaut-aws-sdk-v2 since it has direct dependency on Jackson-databind. E.g. AmazonComputeInstanceMetadataResolver depends on ObjectMapper from jackson.

Steps:

Create micronaut application with micronaut-aws-sdk-v2 module. Add annotation processor micronaut-serde-processor
E.g. build.gradle

`dependencies { ... implementation ("io.micronaut.aws:micronaut-aws-sdk-v2:3.2.1") annotationProcessor("io.micronaut.serde:micronaut-serde-processor:1.0.0") ... }

configurations.all { resolutionStrategy.dependencySubstitution { substitute(module("io.micronaut:micronaut-jackson-databind")) .using(module("io.micronaut.serde:micronaut-serde-jackson:1.0.0")) } }`

Will result in below error.

[ec2-user@ip-172-31-37-0 tars]$ java -jar trade-live-data-listener-0.1-all.jar


| \/ (_) | | | |\/| | |/ | '/ | ' \ / ` | | | | | | | | | | (| | | () | | | | (| | || | | || |||_|_| _/|| ||_,|_,|\| Micronaut (v3.4.0)

04:28:19.733 [main] INFO i.m.context.env.DefaultEnvironment - Established active environments: [ec2, cloud] 04:28:20.320 [main] ERROR io.micronaut.runtime.Micronaut - Error starting Micronaut server: Bean definition [io.micronaut.discovery.cloud.aws.AmazonComputeInstanceMetadataResolver] could not be loaded: com/fasterxml/jackson/databind/ObjectMapper io.micronaut.context.exceptions.BeanInstantiationException: Bean definition [io.micronaut.discovery.cloud.aws.AmazonComputeInstanceMetadataResolver] could not be loaded: com/fasterxml/jackson/databind/ObjectMapper at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1924) at io.micronaut.context.DefaultApplicationContext.initializeContext(DefaultApplicationContext.java:237) at io.micronaut.context.DefaultBeanContext.readAllBeanDefinitionClasses(DefaultBeanContext.java:3453) at io.micronaut.context.DefaultBeanContext.finalizeConfiguration(DefaultBeanContext.java:3883) at io.micronaut.context.DefaultBeanContext.start(DefaultBeanContext.java:329) at io.micronaut.context.DefaultApplicationContext.start(DefaultApplicationContext.java:183) at io.micronaut.runtime.Micronaut.start(Micronaut.java:72) at com.tars.capitalmarket.marketdata.Application.main(Application.java:13) Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper at io.micronaut.discovery.cloud.aws.$AmazonComputeInstanceMetadataResolver$Definition.(Unknown Source) at io.micronaut.discovery.cloud.aws.$AmazonComputeInstanceMetadataResolver$Definition$Reference.load(Unknown Source) at io.micronaut.context.AbstractInitializableBeanDefinitionReference.load(AbstractInitializableBeanDefinitionReference.java:145) at io.micronaut.context.DefaultBeanContext.loadContextScopeBean(DefaultBeanContext.java:2639) at io.micronaut.context.DefaultBeanContext.initializeContext(DefaultBeanContext.java:1922) ... 7 common frames omitted Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)

I had to remove the configuration which replaces the micronaut-jackson-databind with micronaut-serde-jackson. Then it worked fine.

AramMessdaghi9001 commented 2 years ago

It seems like Lambda Native has a similar issue here. When I run the default launch project with aws-lambda, graalvm and serialization-jackson (which includes microanut-serde-jackson), I have the following exception:

Caused by: io.micronaut.core.beans.exceptions.IntrospectionException: No bean introspection available for type [class com.amazonaws.serverless.proxy.model.AwsProxyRequest]. Ensure the class is annotated with io.micronaut.core.annotation.Introspected
at io.micronaut.core.beans.BeanIntrospector.lambda$getIntrospection$3(BeanIntrospector.java:117)
at java.util.Optional.orElseThrow(Optional.java:408)
at io.micronaut.core.beans.BeanIntrospector.getIntrospection(BeanIntrospector.java:117)
at io.micronaut.serde.support.DefaultSerdeIntrospections.lambda$getDeserializableIntrospection$1(DefaultSerdeIntrospections.java:129)
at java.util.Optional.orElseGet(Optional.java:369)
at io.micronaut.serde.support.DefaultSerdeIntrospections.getDeserializableIntrospection(DefaultSerdeIntrospections.java:120)
at io.micronaut.serde.support.deserializers.ObjectDeserializer.createDeserBean(ObjectDeserializer.java:76)
at io.micronaut.serde.support.deserializers.ObjectDeserializer.getDeserializableBean(ObjectDeserializer.java:68)
at io.micronaut.serde.support.deserializers.ObjectDeserializer.createSpecific(ObjectDeserializer.java:56)
at io.micronaut.serde.jackson.JacksonJsonMapper.readValue0(JacksonJsonMapper.java:122)
at io.micronaut.serde.jackson.JacksonJsonMapper.readValue(JacksonJsonMapper.java:116)
at io.micronaut.serde.jackson.JacksonJsonMapper.readValue(JacksonJsonMapper.java:167)
at io.micronaut.json.codec.MapperMediaTypeCodec.decode(MapperMediaTypeCodec.java:189)
at io.micronaut.http.client.netty.FullNettyClientHttpResponse.convertByteBuf(FullNettyClientHttpResponse.java:279)
at io.micronaut.http.client.netty.FullNettyClientHttpResponse.lambda$getBody$1(FullNettyClientHttpResponse.java:217)
at java.util.HashMap.computeIfAbsent(HashMap.java:1134)
at io.micronaut.http.client.netty.FullNettyClientHttpResponse.getBody(FullNettyClientHttpResponse.java:191)
at io.micronaut.http.client.netty.FullNettyClientHttpResponse.<init>(FullNettyClientHttpResponse.java:110)
at io.micronaut.http.client.netty.DefaultHttpClient$11.channelReadInstrumented(DefaultHttpClient.java:2466)
... 41 more
Request loop failed with: Error decoding HTTP response body: No bean introspection available for type [class com.amazonaws.serverless.proxy.model.AwsProxyRequest]. Ensure the class is annotated with io.micronaut.core.annotation.Introspected
12:37:01.983 [multithreadEventLoopGroup-3-1] DEBUG io.netty.channel.ChannelHandlerMask - Class class io.netty.handler.codec.http.HttpClientCodec missing method channelRegistered, assume we can not skip execution
java.lang.NoSuchMethodException: io.netty.handler.codec.http.HttpClientCodec.channelRegistered(io.netty.channel.ChannelHandlerContext)
at java.lang.Class.getMethod(DynamicHub.java:1114)
at io.netty.channel.ChannelHandlerMask$2.run(ChannelHandlerMask.java:174)
at io.netty.channel.ChannelHandlerMask$2.run(ChannelHandlerMask.java:169)
at java.security.AccessController.doPrivileged(AccessController.java:125)
at io.netty.channel.ChannelHandlerMask.isSkippable(ChannelHandlerMask.java:169)
at io.netty.channel.ChannelHandlerMask.mask0(ChannelHandlerMask.java:97)
at io.netty.channel.ChannelHandlerMask.mask(ChannelHandlerMask.java:82)
at io.netty.channel.AbstractChannelHandlerContext.<init>(AbstractChannelHandlerContext.java:109)
at io.netty.channel.DefaultChannelHandlerContext.<init>(DefaultChannelHandlerContext.java:26)
at io.netty.channel.DefaultChannelPipeline.newContext(DefaultChannelPipeline.java:120)
at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:204)
at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:195)
at io.micronaut.http.client.netty.DefaultHttpClient$HttpClientInitializer.addHttp1Handlers(DefaultHttpClient.java:3274)
at io.micronaut.http.client.netty.DefaultHttpClient$HttpClientInitializer.initChannel(DefaultHttpClient.java:3269)
at io.micronaut.http.client.netty.DefaultHttpClient$HttpClientInitializer.initChannel(DefaultHttpClient.java:3154)
at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:129)
at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:112)
at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:938)
at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:609)
at io.netty.channel.DefaultChannelPipeline.access$100(DefaultChannelPipeline.java:46)
at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1463)
at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1115)
at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:650)
at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:514)
at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429)
at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:829)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:597)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:194)
12:37:01.984 [multithreadEventLoopGroup-3-1] DEBUG io.netty.channel.ChannelHandlerMask - Class class io.netty.handler.codec.http.HttpClientCodec missing method channelUnregistered, assume we can not skip execution
java.lang.NoSuchMethodException: io.netty.handler.codec.http.HttpClientCodec.channelUnregistered(io.netty.channel.ChannelHandlerContext)
at java.lang.Class.getMethod(DynamicHub.java:1114)
at io.netty.channel.ChannelHandlerMask$2.run(ChannelHandlerMask.java:174)
at io.netty.channel.ChannelHandlerMask$2.run(ChannelHandlerMask.java:169)
at java.security.AccessController.doPrivileged(AccessController.java:125)
at io.netty.channel.ChannelHandlerMask.isSkippable(ChannelHandlerMask.java:169)
at io.netty.channel.ChannelHandlerMask.mask0(ChannelHandlerMask.java:100)
at io.netty.channel.ChannelHandlerMask.mask(ChannelHandlerMask.java:82)
at io.netty.channel.AbstractChannelHandlerContext.<init>(AbstractChannelHandlerContext.java:109)
at io.netty.channel.DefaultChannelHandlerContext.<init>(DefaultChannelHandlerContext.java:26)
at io.netty.channel.DefaultChannelPipeline.newContext(DefaultChannelPipeline.java:120)
at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:204)
at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:195)
at io.micronaut.http.client.netty.DefaultHttpClient$HttpClientInitializer.addHttp1Handlers(DefaultHttpClient.java:3274)
at io.micronaut.http.client.netty.DefaultHttpClient$HttpClientInitializer.initChannel(DefaultHttpClient.java:3269)
at io.micronaut.http.client.netty.DefaultHttpClient$HttpClientInitializer.initChannel(DefaultHttpClient.java:3154)
at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:129)
at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:112)
at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:938)
at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:609)
at io.netty.channel.DefaultChannelPipeline.access$100(DefaultChannelPipeline.java:46)
at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1463)
at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1115)
at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:650)
at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:514)
at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:429)
at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:486)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:829)
at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:597)
at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:194)

Works without micronaut-serde-jackson