kotlin-hands-on / jvm-js-fullstack

https://play.kotlinlang.org/hands-on/Full%20Stack%20Web%20App%20with%20Kotlin%20Multiplatform/
121 stars 148 forks source link

Latest serialization library doesn't work #21

Open kentosi opened 2 years ago

kentosi commented 2 years ago

I downloaded the latest version of this code and it fails when attempting the following as per the tutorial:

curl -X POST http://localhost:9090/shoppingList \
   -H 'Content-Type: application/json' \
   -d '{
  "desc": "Peppers 🌶",
  "priority": 5
}'

The error I receive is:

2022-08-15 22:27:46.237 [DefaultDispatcher-worker-1] INFO  ktor.application - Responding at http://0.0.0.0:9090
2022-08-15 22:27:48.945 [eventLoopGroupProxy-4-1] ERROR ktor.application - Unhandled: POST - /shoppingList
java.lang.VerifyError: class kotlinx.serialization.json.internal.StreamingJsonDecoder overrides final method kotlinx.serialization.encoding.AbstractDecoder.decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object;
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at kotlinx.serialization.json.Json.decodeFromString(Json.kt:99)
    at io.ktor.serialization.kotlinx.KotlinxSerializationConverter.deserialize(KotlinxSerializationConverter.kt:55)
    at io.ktor.server.plugins.contentnegotiation.RequestConverterKt$convertRequestBody$1$1.invokeSuspend(RequestConverter.kt:38)
    at io.ktor.server.plugins.contentnegotiation.RequestConverterKt$convertRequestBody$1$1.invoke(RequestConverter.kt)
...

After spending a while looking through this error, it turns out that the fix is to revert this line in build.gradle.kts from this:

val serializationVersion = "1.3.3"

To this:

val serializationVersion = "1.3.2"

After doing this, the application works.

mmacphail commented 2 years ago

I had the same issue, and I solved it thanks to you ! I tried using the 1.4.0, but it still did not work.

sebastinto commented 2 years ago

1.4.0 is working for me after updating other dependencies:

val kotlinVersion = "1.7.20-RC"
val serializationVersion = "1.4.0"
val ktorVersion = "2.1.1"
val logbackVersion = "1.4.1"
val kotlinWrappersVersion = "1.0.0-pre.386"
val kmongoVersion = "4.7.1"