FasterXML / jackson-module-kotlin

Module that adds support for serialization/deserialization of Kotlin (http://kotlinlang.org) classes and data classes.
Apache License 2.0
1.12k stars 175 forks source link

kotlin gradle plugin 1.8.0 typereference bug #725

Closed gudals1947 closed 9 months ago

gudals1947 commented 9 months ago

Search before asking

Describe the bug

A bug occurs in typereference when running Kotlin plugin version 1.8.0. This phenomenon does not appear when running debug. Please confirm.

bug content "Internal error: TypeReference constructed without actual type information"

thank you

To Reproduce

// Your code here

Expected behavior

No response

Versions

Kotlin: 1.8.0 Jackson-module-kotlin: 2.13.1 Jackson-databind: 2.13.1

Additional context

No response

cowtowncoder commented 9 months ago

Jackson 2.13.1 is not the latest (or close to latest) version. Could you please try with at least 2.15.3, or (ideally) 2.16.0?

Also: how exactly are you triggering the issue? How could this be reproduced?

gudals1947 commented 9 months ago

When updating to 2.15 and 2.16, an Unsupported class file major version 63 error is generated in com.fasterxml.jackson.core\jackson-core\2.16.0, so testing is not possible.

cowtowncoder commented 9 months ago

@gudals1947 Huh? Major Version 63 would mean JDK 19 and jackson-core releases are built with JDK 8 (major version 52). So that does not sound like something that occurs with Jackson artifacts from Maven Central. I am not sure how you would manage to get that error.

But I hope issue can be reproduced.

gudals1947 commented 9 months ago

@cowtowncoder I am using jdk 19 version in Android Studio. Please check if it is compatible with version 2.16.

cowtowncoder commented 9 months ago

@gudals1947 Please go check that yourself. Jackson in general works with JDKs up to and including 21.

At this point there is no information here to know what the problem might be, how to reproduce and so on.

Without such information this issue will be closed soon; leaving here for now to give submitter a chance to add information.

gudals1947 commented 9 months ago

@cowtowncoder

The previous question was my mistake, sorry. However, after updating to 2.14, the error Internal error: TypeReference constructed without actual type information still appears when building. Below is a code example.

     fun generateMapper(): JsonMapper {
            return JsonMapper.builder()
                .configure(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true)
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
                .addModule(
                    KotlinModule.Builder()
                        .configure(KotlinFeature.NullIsSameAsDefault, enabled = true)
                        .configure(KotlinFeature.StrictNullChecks, enabled = true)
                        .build()
                )
                .addModule(DateTimeFormatModule())
                .disable(MapperFeature.AUTO_DETECT_IS_GETTERS)
                .build()
        }

generateMapper().readValue(
            generateMapper().writeValueAsString(response),
            object : TypeReference<Map<String, Any>>() {})["message"].toString()
 {
  "message" : "123"
 }
# Jackson
-keep @com.fasterxml.jackson.annotation.JsonIgnoreProperties class * { *; }
-keep class com.fasterxml.** { *; }
-keep class org.codehaus.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepclassmembers public final enum com.fasterxml.jackson.annotation.JsonAutoDetect$Visibility {
    public static final com.fasterxml.jackson.annotation.JsonAutoDetect$Visibility *;
}

# General
-keepattributes SourceFile,LineNumberTable,*Annotation*,EnclosingMethod,Signature,Exceptions,InnerClasses

-dontwarn java.beans.ConstructorProperties
-dontwarn java.beans.Transient

-keep class kotlin.Metadata { *; }
-keep class kotlin.reflect.** { *; }

It works well in Android debug, but an error appears in the release version.

cowtowncoder commented 9 months ago

Ok. Does the same happen with Jackson 2.15.3 and 2.16.0?

gudals1947 commented 9 months ago

@cowtowncoder Yes, the same phenomenon is being observed when using 2.16 and 2.15.

k163377 commented 9 months ago

It works well in Android debug, but an error appears in the release version.

This means it is not a jackson-module-kotlin problem. There are no fixes possible in this repository, so please submit your issue to the appropriate place.

fabiorbap commented 1 week ago

To those who had a hard time finding how to fix it, I added this to my proguard-rules.pro:

-keep class extends com.fasterxml.jackson.core.type.TypeReference { ; } -keep class com.fasterxml.jackson.core.type.TypeReference