rubenlagus / TelegramBots

Java library to create bots using Telegram Bots API
https://telegram.me/JavaBotsApi
MIT License
4.68k stars 1.18k forks source link

Error when use Spring Native #1186

Closed MiguelAngelLV closed 5 months ago

MiguelAngelLV commented 1 year ago

Describe the bug When use Spring Boot Native with Telegram Bots Spring library, get error of jackson

To Reproduce Steps to reproduce the behavior:

  1. Create a Spring Boot 2.7.7 project with Spring Native
  2. Add telegrambots-spring-boot-starter library
  3. Create a simple bot
  4. Compile with bootBuildImage
  5. Execute the image

Expected behavior Start spring boot project with telegram bot

Actual

You get these errors:

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.telegram.telegrambots.meta.api.objects.ApiResponse` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (String)"{"ok":true,"result":true,"description":"Webhook is already deleted"}"; line: 1, column: 2]
        at com.fasterxml.jackson.databind.DeserializationContext.reportBadDefinition(DeserializationContext.java:1904) ~[com.zred.zgitlab.ZGitlabApplicationKt:2.13.4.2]
        at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[com.zred.zgitlab.ZGitlabApplicationKt:2.13.4.2]
        at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1349) ~[com.zred.zgitlab.ZGitlabApplicationKt:2.13.4.2]
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1415) ~[com.zred.zgitlab.ZGitlabApplicationKt:2.13.4.2]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[com.zred.zgitlab.ZGitlabApplicationKt:2.13.4.2]
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[com.zred.zgitlab.ZGitlabApplicationKt:2.13.4.2]
        at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[com.zred.zgitlab.ZGitlabApplicationKt:2.13.4.2]
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674) ~[com.zred.zgitlab.ZGitlabApplicationKt:2.13.4.2]
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3629) ~[com.zred.zgitlab.ZGitlabApplicationKt:2.13.4.2]
        at org.telegram.telegrambots.meta.api.methods.PartialBotApiMethod.deserializeResponseInternal(PartialBotApiMethod.java:49) ~[com.zred.zgitlab.ZGitlabApplicationKt:na]

It works fine in .jar mode, only fail in native mode.

jmy2022 commented 1 year ago

same

Haarolean commented 8 months ago

It's not an issue with TelegramBots per se, rather it's related to native image. You can build graalvm reachability metadata by either running your app in runtime or via tests. For further info, see here