https://kotlinlang.org logo
#eap
Title
r

rscorer

06/15/2020, 2:44 PM
I upgraded my little app to be 1.4-M2 and had to roll back to 1.4-M1 as I got this error at runtime:
Copy code
Exception in thread "main" java.lang.NoSuchMethodError: 'kotlinx.serialization.CompositeEncoder kotlinx.serialization.Encoder.beginStructure(kotlinx.serialization.SerialDescriptor)'
Copy code
@Serializable
data class EmailData(val email: String)

@Serializable
data class ToList(val to: List<EmailData>)

@Serializable
data class FromList(val from: EmailData)

@Serializable
data class EmailContentType(val type: String, val value: String)

@Serializable
data class Data(val personalizations: List<ToList>, val from: EmailData, val subject: String, val content: List<EmailContentType>)

@Suppress("EXPERIMENTAL_API_USAGE")
class Mailer {
    val sendGridApiKey = System.getenv("SENDGRIDAPIKEY")
    val JSON = "application/json; charset=utf-8".toMediaType()
    val sendGridRecipient = System.getenv("SENDGRIDEMAILADDR")
    val gson = Gson()

    fun sendmail(subject: String, content: String): String {
        val email = EmailData(sendGridRecipient)
        val data = Data(listOf(ToList(listOf(email))), email, subject, listOf(EmailContentType("text/plain", content)))
        val json = Json.stringify(Data.serializer(), data)
a

Alexey Belkov [JB]

06/15/2020, 3:07 PM
Make sure you're using correct versions in your build.gradle:
Copy code
plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.4-M2'
    id 'org.jetbrains.kotlin.plugin.serialization' version '1.4-M2'
}

dependencies {
    implementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.20.0-1.4-M2"
}
r

rscorer

06/15/2020, 3:20 PM
yup, although i had not updated the serialization runtime, it still fails 😞
Copy code
kotlinVersion=1.4-M2
kotlinXVersion=0.20.0-1.4-M2
Copy code
Exception in thread "main" java.lang.NoSuchMethodError: 'kotlinx.serialization.CompositeEncoder kotlinx.serialization.Encoder.beginStructure(kotlinx.serialization.SerialDescriptor)'
	at daily.Data$$serializer.serialize(Mailer.kt)
	at daily.Data$$serializer.serialize(Mailer.kt:20)
	at kotlinx.serialization.json.internal.StreamingJsonOutput.encodeSerializableValue(StreamingJsonOutput.kt:227)
	at kotlinx.serialization.EncodingKt.encode(Encoding.kt:402)
	at kotlinx.serialization.json.Json.stringify(Json.kt:100)
	at kotlinx.serialization.json.Json$Default.stringify(Json.kt:208)
	at daily.Mailer.sendmail(Mailer.kt:31)
a

Alexey Belkov [JB]

06/15/2020, 3:32 PM
Are you sure you have recompiled the code after changing the dependency? I can't reproduce it with 0.20.0-1.4-M2.
Copy code
import kotlinx.serialization.*
import kotlinx.serialization.json.*

@Serializable
data class EmailData(val email: String)
@Serializable
data class ToList(val to: List<EmailData>)
@Serializable
data class FromList(val from: EmailData)
@Serializable
data class EmailContentType(val type: String, val value: String)
@Serializable
data class Data(val personalizations: List<ToList>, val from: EmailData, val subject: String, val content: List<EmailContentType>)
@Suppress("EXPERIMENTAL_API_USAGE")
class Mailer {
    val sendGridApiKey = "nsthns"
    val sendGridRecipient = "nthnsth"
    fun sendmail(subject: String, content: String) {
        val email = EmailData(sendGridRecipient)
        val data = Data(listOf(ToList(listOf(email))), email, subject, listOf(EmailContentType("text/plain", content)))
        val json = Json.stringify(Data.serializer(), data)
    }
}

fun main() {
    Mailer().sendmail("","")
}
r

rscorer

06/15/2020, 3:42 PM
i had done a gradle clean and it failed locally -- but when i built it as native that obviously forced the recompilation correctly, and it is all working now. Thanks for your help.
👍 1
2 Views