Skip to content

Commit b20379f

Browse files
Merge pull request #663 from ArikSquad/feat/upgrade-jackson
upgrade Jackson to 3.x
2 parents bfa5bf0 + 5ce85bf commit b20379f

16 files changed

Lines changed: 79 additions & 132 deletions

File tree

build.gradle.kts

Lines changed: 26 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,45 @@
11
plugins {
22
base
3+
java
34
id("io.freefair.lombok") version "9.1.0"
45
}
56

6-
buildscript {
7-
repositories {
8-
mavenCentral()
9-
maven("https://plugins.gradle.org/m2/")
10-
}
11-
}
12-
13-
allprojects {
14-
group = "net.swofty"
15-
version = "1.0"
16-
17-
repositories {
18-
mavenLocal()
19-
mavenCentral()
20-
}
21-
}
7+
group = "net.swofty"
8+
version = "1.0"
229

2310
subprojects {
24-
apply(plugin = "io.freefair.lombok")
2511
apply(plugin = "java")
2612
apply(plugin = "java-library")
27-
apply(plugin = "application")
13+
apply(plugin = "io.freefair.lombok")
2814

29-
plugins.withType<JavaPlugin> {
30-
repositories {
31-
mavenLocal()
32-
mavenCentral()
33-
gradlePluginPortal()
15+
repositories {
16+
mavenCentral()
17+
mavenLocal()
18+
maven("https://repo.viaversion.com")
19+
maven("https://jitpack.io")
20+
}
3421

35-
maven("https://repo.viaversion.com")
36-
maven("https://jitpack.io")
22+
java {
23+
toolchain {
24+
languageVersion.set(JavaLanguageVersion.of(25))
3725
}
26+
}
3827

39-
dependencies {
40-
"testImplementation"("org.junit.jupiter:junit-jupiter:6.0.2")
41-
42-
"implementation"("org.reflections:reflections:0.10.2")
43-
"implementation"("com.fasterxml.jackson.core:jackson-databind:2.17.0")
44-
"implementation"("com.fasterxml.jackson.core:jackson-annotations:2.17.0")
45-
"implementation"("com.fasterxml.jackson.core:jackson-core:2.17.0")
46-
"implementation"("org.json:json:20240303")
47-
"compileOnly"("org.projectlombok:lombok:1.18.42")
48-
}
28+
dependencies {
29+
testImplementation("org.junit.jupiter:junit-jupiter:6.0.2")
4930

50-
tasks.withType<JavaCompile> {
51-
sourceCompatibility = JavaVersion.VERSION_25.toString()
52-
targetCompatibility = JavaVersion.VERSION_25.toString()
53-
options.encoding = "UTF-8"
54-
}
31+
implementation("org.reflections:reflections:0.10.2")
32+
implementation("org.json:json:20240303")
5533

56-
tasks.withType<Test> {
57-
useJUnitPlatform()
58-
}
59-
}
34+
compileOnly("org.projectlombok:lombok:1.18.42")
6035

61-
tasks.named<Zip>("distZip") {
62-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
36+
implementation(platform("tools.jackson:jackson-bom:3.0.3"))
37+
implementation("tools.jackson.core:jackson-core")
38+
implementation("tools.jackson.core:jackson-databind")
39+
implementation("com.fasterxml.jackson.core:jackson-annotations:2.20")
6340
}
6441

65-
tasks.named<Tar>("distTar") {
66-
duplicatesStrategy = DuplicatesStrategy.INCLUDE
42+
tasks.test {
43+
useJUnitPlatform()
6744
}
68-
}
45+
}

commons/src/main/java/net/swofty/commons/protocol/JacksonSerializer.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package net.swofty.commons.protocol;
22

3-
import com.fasterxml.jackson.databind.DeserializationFeature;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
5-
import com.fasterxml.jackson.databind.SerializationFeature;
63
import lombok.SneakyThrows;
4+
import tools.jackson.databind.DeserializationFeature;
5+
import tools.jackson.databind.SerializationFeature;
6+
import tools.jackson.databind.json.JsonMapper;
77

88
public class JacksonSerializer<T> implements Serializer<T> {
9-
private final ObjectMapper mapper;
9+
private final JsonMapper mapper;
1010
private final Class<T> clazz;
1111

1212
public JacksonSerializer(Class<T> clazz) {
13-
this.mapper = new ObjectMapper()
13+
this.mapper = JsonMapper.builder()
1414
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
15-
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
15+
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
16+
.build();
1617
this.clazz = clazz;
1718
}
1819

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
package net.swofty.commons.protocol.serializers;
22

3-
import com.fasterxml.jackson.core.JsonParser;
4-
import com.fasterxml.jackson.databind.DeserializationContext;
5-
import com.fasterxml.jackson.databind.JsonDeserializer;
6-
import com.fasterxml.jackson.databind.JsonNode;
3+
import com.google.gson.*;
74
import net.minestom.server.item.Material;
85

9-
import java.io.IOException;
6+
import java.lang.reflect.Type;
107

11-
public class MaterialDeserializer extends JsonDeserializer<Material> {
8+
public class MaterialDeserializer implements JsonDeserializer<Material> {
129
@Override
13-
public Material deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
14-
JsonNode node = p.getCodec().readTree(p);
15-
return Material.fromKey(node.asText());
10+
public Material deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
11+
return Material.fromKey(jsonElement.getAsString());
1612
}
1713
}
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package net.swofty.commons.protocol.serializers;
22

3-
import com.fasterxml.jackson.core.JsonGenerator;
4-
import com.fasterxml.jackson.databind.JsonSerializer;
5-
import com.fasterxml.jackson.databind.SerializerProvider;
3+
import com.google.gson.JsonElement;
4+
import com.google.gson.JsonSerializationContext;
5+
import com.google.gson.JsonSerializer;
66
import net.minestom.server.item.Material;
7+
import java.lang.reflect.Type;
78

8-
import java.io.IOException;
9-
10-
public class MaterialSerializer extends JsonSerializer<Material> {
9+
public class MaterialSerializer implements JsonSerializer<Material> {
1110
@Override
12-
public void serialize(Material value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
13-
gen.writeString(value.key().asString());
11+
public JsonElement serialize(Material src, Type typeOfSrc, JsonSerializationContext context) {
12+
return context.serialize(src.key().asString());
1413
}
1514
}

commons/src/main/java/net/swofty/commons/protocol/serializers/PlayerShopDataSerializer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package net.swofty.commons.protocol.serializers;
22

3-
import com.fasterxml.jackson.databind.JsonNode;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
53
import lombok.SneakyThrows;
64
import net.swofty.commons.skyblock.PlayerShopData;
75
import net.swofty.commons.protocol.Serializer;
6+
import tools.jackson.databind.JsonNode;
7+
import tools.jackson.databind.ObjectMapper;
88

99
import java.util.Map;
1010

type.generic/src/main/java/net/swofty/type/generic/achievement/AchievementStatisticsService.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package net.swofty.type.generic.achievement;
22

3-
import com.fasterxml.jackson.databind.JsonNode;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
53
import net.minestom.server.MinecraftServer;
64
import net.minestom.server.timer.TaskSchedule;
75
import net.swofty.type.generic.data.mongodb.UserDatabase;
86
import org.bson.Document;
97
import org.tinylog.Logger;
8+
import tools.jackson.databind.JsonNode;
9+
import tools.jackson.databind.ObjectMapper;
1010

1111
import java.util.Map;
1212
import java.util.concurrent.ConcurrentHashMap;
@@ -110,7 +110,7 @@ private static void countPlayerAchievements(String achievementDataJson, Map<Stri
110110

111111
if (achievements == null || !achievements.isObject()) return;
112112

113-
achievements.fields().forEachRemaining(entry -> {
113+
achievements.properties().forEach(entry -> {
114114
String achievementId = entry.getKey();
115115
JsonNode progress = entry.getValue();
116116

@@ -131,7 +131,8 @@ private static void countPlayerAchievements(String achievementDataJson, Map<Stri
131131
}
132132
}
133133
});
134-
} catch (Exception e) {
134+
} catch (Exception _) {
135+
Logger.warn("Error parsing achievement data JSON");
135136
}
136137
}
137138

type.generic/src/main/java/net/swofty/type/generic/data/Datapoint.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package net.swofty.type.generic.data;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
43
import lombok.Getter;
54
import lombok.SneakyThrows;
65
import net.minestom.server.MinecraftServer;
@@ -9,6 +8,7 @@
98
import net.swofty.type.generic.leaderboard.LeaderboardService;
109
import net.swofty.type.generic.leaderboard.LeaderboardTracked;
1110
import net.swofty.type.generic.leaderboard.MapLeaderboardTracked;
11+
import tools.jackson.core.JacksonException;
1212

1313
import java.util.Map;
1414
import java.util.Objects;
@@ -42,7 +42,7 @@ public Datapoint<T> deepClone() {
4242
public Datapoint<T> setUser(DataHandler dataHandler) { this.dataHandler = dataHandler; return this; }
4343
public Datapoint<T> setData(Enum<?> data) { this.data = data; return this; }
4444

45-
public String getSerializedValue() throws JsonProcessingException { return serializer.serialize(value); }
45+
public String getSerializedValue() throws JacksonException { return serializer.serialize(value); }
4646
public void deserializeValue(String json) { this.value = serializer.deserialize(json); }
4747

4848
/** Copy value from another datapoint without triggering onChange. */

type.generic/src/main/java/net/swofty/type/generic/data/HypixelDataHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package net.swofty.type.generic.data;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
43
import lombok.Getter;
54
import net.kyori.adventure.text.Component;
65
import net.minestom.server.MinecraftServer;
@@ -20,6 +19,7 @@
2019
import org.jetbrains.annotations.Blocking;
2120
import org.jetbrains.annotations.Nullable;
2221
import org.tinylog.Logger;
22+
import tools.jackson.core.JacksonException;
2323

2424
import java.util.UUID;
2525
import java.util.function.BiConsumer;
@@ -76,7 +76,7 @@ public Document toDocument() {
7676
for (Data data : Data.values()) {
7777
try {
7878
document.put(data.getKey(), getDatapoint(data.getKey()).getSerializedValue());
79-
} catch (JsonProcessingException e) {
79+
} catch (JacksonException e) {
8080
Logger.error(e, "Failed to serialize datapoint {} for user {}", data.getKey(), this.uuid);
8181
}
8282
}

type.generic/src/main/java/net/swofty/type/generic/data/handlers/BedWarsDataHandler.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,19 @@
11
package net.swofty.type.generic.data.handlers;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
43
import lombok.Getter;
5-
import net.swofty.commons.bedwars.BedwarsGameType;
64
import net.swofty.type.generic.data.DataHandler;
75
import net.swofty.type.generic.data.Datapoint;
86
import net.swofty.type.generic.data.GameDataHandler;
9-
import net.swofty.commons.bedwars.BedWarsModeStats;
10-
import net.swofty.commons.bedwars.LeaderboardPreferences;
11-
import net.swofty.type.generic.data.HypixelDataHandler;
127
import net.swofty.type.generic.data.datapoints.*;
138
import net.swofty.type.generic.data.datapoints.DatapointBedWarsModeStats;
149
import net.swofty.type.generic.data.datapoints.DatapointBedWarsQuickBuy;
1510
import net.swofty.type.generic.data.datapoints.DatapointLeaderboardPreferences;
1611
import net.swofty.type.generic.data.mongodb.UserDatabase;
17-
import net.swofty.type.generic.leaderboard.LeaderboardService;
1812
import net.swofty.type.generic.user.HypixelPlayer;
1913
import org.bson.Document;
2014
import org.jetbrains.annotations.Nullable;
2115
import org.tinylog.Logger;
16+
import tools.jackson.core.JacksonException;
2217

2318
import java.util.HashMap;
2419
import java.util.Map;
@@ -136,7 +131,7 @@ public Document toDocument() {
136131
for (Data data : Data.values()) {
137132
try {
138133
document.put(data.getKey(), getDatapoint(data.getKey()).getSerializedValue());
139-
} catch (JsonProcessingException e) {
134+
} catch (JacksonException e) {
140135
e.printStackTrace();
141136
}
142137
}

type.generic/src/main/java/net/swofty/type/generic/data/handlers/MurderMysteryDataHandler.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package net.swofty.type.generic.data.handlers;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
43
import lombok.Getter;
54
import net.swofty.type.generic.data.DataHandler;
65
import net.swofty.type.generic.data.Datapoint;
76
import net.swofty.type.generic.data.GameDataHandler;
8-
import net.swofty.commons.murdermystery.MurderMysteryModeStats;
97
import net.swofty.type.generic.data.datapoints.*;
108
import net.swofty.type.generic.user.HypixelPlayer;
119
import org.bson.Document;
1210
import org.jetbrains.annotations.Nullable;
1311
import org.tinylog.Logger;
12+
import tools.jackson.core.JacksonException;
1413

1514
import java.util.HashMap;
1615
import java.util.Map;
@@ -120,7 +119,7 @@ public Document toDocument() {
120119
for (Data data : Data.values()) {
121120
try {
122121
document.put(data.getKey(), getDatapoint(data.getKey()).getSerializedValue());
123-
} catch (JsonProcessingException e) {
122+
} catch (JacksonException e) {
124123
e.printStackTrace();
125124
}
126125
}
@@ -132,7 +131,6 @@ public Datapoint<?> get(Data datapoint) {
132131
return dp != null ? dp : datapoint.defaultDatapoint;
133132
}
134133

135-
@SuppressWarnings("unchecked")
136134
public <R extends Datapoint<?>> R get(Data datapoint, Class<R> type) {
137135
Datapoint<?> dp = this.datapoints.get(datapoint.key);
138136
return (R) (dp != null ? type.cast(dp) : type.cast(datapoint.defaultDatapoint));

0 commit comments

Comments
 (0)