aws / aws/serverless-java-container

Jackson afterburner module is not compatible with Java11 and GraalVM native image

未關閉
#428 17 則留言 2 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
Java
星號
1.6k
分支
574
PR 合併指標
30 天內沒有已合併 PR

描述

Not sure i'm missing something or not but Jackson AfterBurner module is not compatible with java11 and throwing following error when it is compiled with graalvm-21.01 native image

```
Error loading class my.service.StreamLambdaHandler: Target_java_lang_ClassLoader.getClassLoadingLock(String): com.oracle.svm.core.jdk.UnsupportedFeatureError
--
com.oracle.svm.core.jdk.UnsupportedFeatureError: Target_java_lang_ClassLoader.getClassLoadingLock(String)
at com.oracle.svm.core.util.VMError.unsupportedFeature(VMError.java:88)
at java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:259)
at com.fasterxml.jackson.module.afterburner.util.MyClassLoader.loadAndResolve(MyClassLoader.java:79)
at com.fasterxml.jackson.module.afterburner.deser.PropertyMutatorCollector.generateMutatorClass(PropertyMutatorCollector.java:176)
at com.fasterxml.jackson.module.afterburner.deser.PropertyMutatorCollector.buildMutator(PropertyMutatorCollector.java:102)
at com.fasterxml.jackson.module.afterburner.deser.DeserializerModifier.updateBuilder(DeserializerModifier.java:65)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:287)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:150)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:414)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:591)
at com.fasterxml.jackson.databind.ObjectReader._prefetchRootDeserializer(ObjectReader.java:2340)
at com.fasterxml.jackson.databind.ObjectReader.(ObjectReader.java:192)
at com.fasterxml.jackson.databind.ObjectMapper._newReader(ObjectMapper.java:736)
at com.fasterxml.jackson.databind.ObjectMapper.readerFor(ObjectMapper.java:4051)
at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.(LambdaContainerHandler.java:107)
at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.(LambdaContainerHandler.java:118)
at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.(AwsLambdaServletContainerHandler.java:75)
at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.(SpringBootLambdaContainerHandler.java:135)
at com.amazonaws.serverless.proxy.spring.SpringBootProxyHandlerBuilder.build(SpringBootProxyHandlerBuilder.java:61)
at com.amazonaws.serverless.proxy.spring.SpringBootProxyHandlerBuilder.buildAndInitialize(SpringBootProxyHandlerBuilder.java:80)
at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.getAwsProxyHandler(SpringBootLambdaContainerHandler.java:93)
at my.service.StreamLambdaHandler.(StreamLambdaHandler.java:27)
at com.oracle.svm.core.classinitialization.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:375)
at com.oracle.svm.core.classinitialization.ClassInitializationInfo.initialize(ClassInitializationInfo.java:295)
at java.lang.Class.ensureInitialized(DynamicHub.java:548)
at com.oracle.svm.core.hub.ClassForNameSupport.forNameOrNull(ClassForNameSupport.java:63)
at com.oracle.svm.core.hub.ClassForNameSupport.forName(ClassForNameSupport.java:69)
at java.lang.Class.forName(DynamicHub.java:1319)
```

https://github.com/awslabs/aws-serverless-java-container/blob/a72bad46a263d07d71fc2765be94899bfddbba11/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java#L88

but when the afterburner module is removed it is working fine !

might be good idea to migrate to https://github.com/stevenschlansker/jackson-blackbird which is promising with Java11

Find the code at https://github.com/mokmnovatti/my-service

貢獻指南

開啟貢獻指南

研究方向

從 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java 第 88 行附近的初始化路徑開始,然後追蹤顯示的 Afterburner 呼叫,直到 MyClassLoader.loadAndResolve。在 Java 11 和 GraalVM native image 下使用連結的 my-service 專案重現此失敗;完成條件是 handler 能夠初始化且不會出現回報的 UnsupportedFeatureError,同時保留正常的 Jackson 行為。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
aws, java
領域
backend, cloud
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
停滯
描述清晰度
需要釐清
新手友好度
30/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。