Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
0d3b4ad
Api Version 9.4
rubenlagus Feb 9, 2026
84842fb
Api Version 9.4
rubenlagus Feb 12, 2026
fe73d7c
Api Version 9.4
rubenlagus Feb 14, 2026
7f9c00c
feat(telegrambots-meta): migrate from Jackson 2 to Jackson 3
yvasyliev Feb 17, 2026
6da65a9
feat(telegrambots-client): migrate from Jackson 2 to Jackson 3
yvasyliev Feb 18, 2026
0eca576
feat(telegrambots-client): remove `defaultImpl` for the `@JsonTypeInf…
yvasyliev Feb 18, 2026
704faff
feat(telegrambots-longpolling): migrate from Jackson 2 to Jackson 3
yvasyliev Feb 18, 2026
b058970
feat(Bot): bump JUnit and Mockito dependencies; replace explicit depe…
yvasyliev Feb 18, 2026
83e5b98
feat(telegrambots-webhook): migrate from Jackson 2 to Jackson 3
yvasyliev Feb 18, 2026
9e51750
Merge branch 'dev' into feature/jackson3
yvasyliev Feb 18, 2026
68fef66
feat(telegrambots-webhook): create `Jackson3MapperTest`
yvasyliev Feb 19, 2026
7b468c8
Merge remote-tracking branch 'origin/feature/jackson3' into feature/j…
yvasyliev Feb 19, 2026
67e6e38
feat(telegrambots-client-jetty-adapter): migrate from Jackson 2 to Ja…
yvasyliev Feb 19, 2026
b775b79
feat(telegrambots-abilities): migrate from Jackson 2 to Jackson 3
yvasyliev Feb 20, 2026
9cf6115
feat(telegrambots-springboot-webhook-starter): migrate from Jackson 2…
yvasyliev Feb 20, 2026
afcf6bc
feat(telegrambots-test-reports): migrate from Jackson 2 to Jackson 3
yvasyliev Feb 20, 2026
c594443
chore: remove `ObjectMapper` references
yvasyliev Feb 20, 2026
512f719
Merge branch 'dev' into feature/jackson3
yvasyliev Mar 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lombok.config
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lombok.jacksonized.jacksonVersion += 3
65 changes: 23 additions & 42 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -63,20 +63,27 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<jackson.version>2.17.2</jackson.version>
<jackson.version>3.0.3</jackson.version>
<slf4j.version>2.0.12</slf4j.version>
<lombok.version>1.18.34</lombok.version>
<lombok.version>edge-SNAPSHOT</lombok.version> <!-- TODO: stable version -->
<guava.version>33.2.1-jre</guava.version>
<commons-lang.version>3.18.0</commons-lang.version>
<commons-io.version>2.16.1</commons-io.version>
<okhttp.version>4.12.0</okhttp.version>

<junit.version>5.12.2</junit.version>
<mockito.version>5.12.0</mockito.version>
<mockitojupiter.version>5.12.0</mockitojupiter.version>
<junit.version>6.0.3</junit.version>
<mockito.version>5.21.0</mockito.version>
<awaitability.version>4.2.1</awaitability.version>
</properties>

<!-- TODO: remove -->
<repositories>
<repository>
<id>projectlombok.org</id>
<url>https://projectlombok.org/edge-releases</url>
</repository>
</repositories>

<dependencyManagement>
<dependencies>
<dependency>
Expand Down Expand Up @@ -106,51 +113,28 @@
<version>${okhttp.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<groupId>tools.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<version>${jackson.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>


<!-- Test -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<artifactId>mockito-bom</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
Expand All @@ -171,21 +155,18 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>${mockitojupiter.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,25 @@
package org.telegram.telegrambots.abilitybots.api.db;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.extern.slf4j.Slf4j;
import org.mapdb.Atomic;
import org.mapdb.DB;
import org.mapdb.DBMaker;
import org.mapdb.Serializer;
import org.telegram.telegrambots.abilitybots.api.util.Pair;

import java.io.IOException;
import java.util.*;
import tools.jackson.core.JacksonException;
import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.DefaultTyping;
import tools.jackson.databind.json.JsonMapper;
import tools.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
import tools.jackson.databind.jsontype.PolymorphicTypeValidator;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringJoiner;

import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Sets.newHashSet;
Expand All @@ -31,13 +39,19 @@
@Slf4j
public class MapDBContext implements DBContext {
private final DB db;
private final ObjectMapper objectMapper;
private final JsonMapper jsonMapper;

public MapDBContext(DB db) {
this.db = db;

objectMapper = new ObjectMapper();
objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator());
PolymorphicTypeValidator ptv = BasicPolymorphicTypeValidator.builder()
.allowIfSubType("org.telegram.telegrambots")
.allowIfSubType("java")
.build();

this.jsonMapper = JsonMapper.builder()
.activateDefaultTyping(ptv, DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY)
.build();
}

/**
Expand Down Expand Up @@ -114,11 +128,11 @@ public boolean recover(Object backup) {
Map<String, Object> snapshot = localCopy();

try {
Map<String, Object> backupData = objectMapper.readValue(backup.toString(), new TypeReference<HashMap<String, Object>>() {
Map<String, Object> backupData = jsonMapper.readValue(backup.toString(), new TypeReference<HashMap<String, Object>>() {
});
doRecover(backupData);
return true;
} catch (IOException e) {
} catch (JacksonException e) {
log.error(format("Could not recover DB data from file with String representation %s", backup), e);
// Attempt to fallback to data snapshot before recovery
doRecover(snapshot);
Expand Down Expand Up @@ -210,8 +224,8 @@ private void doRecover(Map<String, Object> backupData) {

private String writeAsString(Object obj) {
try {
return objectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
return jsonMapper.writeValueAsString(obj);
} catch (JacksonException e) {
log.info(format("Failed to read the JSON representation of object: %s", obj), e);
return "Error reading required data...";
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package org.telegram.telegrambots.client.jetty;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.eclipse.jetty.client.InputStreamRequestContent;
import org.eclipse.jetty.client.MultiPartRequestContent;
import org.eclipse.jetty.client.PathRequestContent;
Expand All @@ -13,6 +11,8 @@
import org.telegram.telegrambots.meta.api.objects.media.InputMedia;
import org.telegram.telegrambots.meta.api.objects.media.paid.InputPaidMedia;
import org.telegram.telegrambots.meta.api.objects.stickers.InputSticker;
import tools.jackson.core.JacksonException;
import tools.jackson.databind.json.JsonMapper;

import java.io.IOException;
import java.util.List;
Expand All @@ -23,9 +23,9 @@
*/
public class JettyMultipartBuilder {
private final MultiPartRequestContent multiPart = new MultiPartRequestContent();
private final ObjectMapper mapper;
private final JsonMapper mapper;

public JettyMultipartBuilder(ObjectMapper mapper) {
public JettyMultipartBuilder(JsonMapper mapper) {
this.mapper = mapper;
}

Expand Down Expand Up @@ -61,12 +61,12 @@ public JettyMultipartBuilder addPart(String fieldName, Object value) {
}

/**
* Add field to the builder if value is not null. The value is converted using ObjectMapper.writeValueAsString()
* Add field to the builder if value is not null. The value is converted using JsonMapper.writeValueAsString()
* @param fieldName the field name to add to the multipart
* @param value the nullable value to add
* @return the builder
*/
public JettyMultipartBuilder addJsonPart(String fieldName, Object value) throws JsonProcessingException {
public JettyMultipartBuilder addJsonPart(String fieldName, Object value) throws JacksonException {
if (value != null) {
this.addPart(fieldName, mapper.writeValueAsString(value));
}
Expand Down Expand Up @@ -137,7 +137,7 @@ public JettyMultipartBuilder addMedia(InputPaidMedia media) throws IOException {
return this;
}

public JettyMultipartBuilder addInputStickers(String stickersField, List<InputSticker> stickers) throws IOException {
public JettyMultipartBuilder addInputStickers(String stickersField, List<InputSticker> stickers) throws IOException, JacksonException {
for (InputSticker sticker : stickers) {
addInputFile(null, sticker.getSticker(), false);
}
Expand Down
Loading