Skip to content

Commit b8cbd38

Browse files
authored
#557: fix json mapping (#617)
1 parent f296ef9 commit b8cbd38

33 files changed

+181
-77
lines changed

CHANGELOG.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ This file documents all notable changes to https://github.com/devonfw/IDEasy[IDE
77
Release with new features and bugfixes:
88

99
* https://github.com/devonfw/IDEasy/issues/553[#554]: Missmatch of IDE_ROOT
10+
* https://github.com/devonfw/IDEasy/issues/557[#557]: Failed to update tomcat: Cannot find a (Map) Key deserializer for type VersionRange
1011

1112
The full list of changes for this release can be found in https://github.com/devonfw/IDEasy/milestone/13?closed=1[milestone 2024.09.002].
1213

cli/src/main/java/com/devonfw/tools/ide/github/GithubTag.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.devonfw.tools.ide.github;
22

3-
import com.devonfw.tools.ide.common.JsonVersionItem;
3+
import com.devonfw.tools.ide.json.JsonVersionItem;
44
import com.fasterxml.jackson.annotation.JsonProperty;
55

66
/**

cli/src/main/java/com/devonfw/tools/ide/github/GithubTags.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.ArrayList;
44

5-
import com.devonfw.tools.ide.common.JsonObject;
5+
import com.devonfw.tools.ide.json.JsonObject;
66

77
/**
88
* {@link JsonObject} for {@link GithubTag}s (refs).

cli/src/main/java/com/devonfw/tools/ide/json/mapping/JsonMapping.java renamed to cli/src/main/java/com/devonfw/tools/ide/json/JsonMapping.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
package com.devonfw.tools.ide.json.mapping;
1+
package com.devonfw.tools.ide.json;
22

3+
import com.devonfw.tools.ide.version.VersionIdentifier;
4+
import com.devonfw.tools.ide.version.VersionRange;
35
import com.fasterxml.jackson.annotation.JsonInclude;
46
import com.fasterxml.jackson.databind.DeserializationFeature;
57
import com.fasterxml.jackson.databind.ObjectMapper;
68
import com.fasterxml.jackson.databind.SerializationFeature;
9+
import com.fasterxml.jackson.databind.module.SimpleModule;
710
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
811

912
/**
@@ -22,6 +25,11 @@ public static ObjectMapper create() {
2225
mapper = mapper.enable(SerializationFeature.INDENT_OUTPUT);
2326
mapper = mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
2427
mapper = mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
28+
SimpleModule customModule = new SimpleModule();
29+
customModule.addDeserializer(VersionIdentifier.class, new VersionIdentifierDeserializer());
30+
customModule.addDeserializer(VersionRange.class, new VersionRangeDeserializer());
31+
customModule.addKeyDeserializer(VersionRange.class, new VersionRangeKeyDeserializer());
32+
mapper = mapper.registerModule(customModule);
2533
return mapper;
2634
}
2735

cli/src/main/java/com/devonfw/tools/ide/common/JsonObject.java renamed to cli/src/main/java/com/devonfw/tools/ide/json/JsonObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.devonfw.tools.ide.common;
1+
package com.devonfw.tools.ide.json;
22

33
/**
44
* Interface for a data object that can be read from and written to JSON.

cli/src/main/java/com/devonfw/tools/ide/common/JsonVersionItem.java renamed to cli/src/main/java/com/devonfw/tools/ide/json/JsonVersionItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.devonfw.tools.ide.common;
1+
package com.devonfw.tools.ide.json;
22

33
/**
44
* Interface for a data object that can be read from and written to JSON.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.devonfw.tools.ide.json;
2+
3+
import java.io.IOException;
4+
5+
import com.devonfw.tools.ide.version.VersionIdentifier;
6+
import com.fasterxml.jackson.core.JacksonException;
7+
import com.fasterxml.jackson.core.JsonParser;
8+
import com.fasterxml.jackson.core.JsonToken;
9+
import com.fasterxml.jackson.databind.DeserializationContext;
10+
import com.fasterxml.jackson.databind.JsonDeserializer;
11+
12+
/**
13+
* {@link JsonDeserializer} for {@link VersionIdentifier}.
14+
*/
15+
public class VersionIdentifierDeserializer extends JsonDeserializer<VersionIdentifier> {
16+
17+
@Override
18+
public VersionIdentifier deserialize(JsonParser p, DeserializationContext context) throws IOException, JacksonException {
19+
20+
JsonToken token = p.getCurrentToken();
21+
if (token == JsonToken.VALUE_STRING) {
22+
return VersionIdentifier.of(p.getValueAsString());
23+
} else {
24+
throw new IllegalArgumentException("Invalid JSON for VersionRange!");
25+
}
26+
}
27+
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.devonfw.tools.ide.json;
2+
3+
import java.io.IOException;
4+
5+
import com.devonfw.tools.ide.version.VersionRange;
6+
import com.fasterxml.jackson.core.JacksonException;
7+
import com.fasterxml.jackson.core.JsonParser;
8+
import com.fasterxml.jackson.core.JsonToken;
9+
import com.fasterxml.jackson.databind.DeserializationContext;
10+
import com.fasterxml.jackson.databind.JsonDeserializer;
11+
12+
/**
13+
* {@link JsonDeserializer} for {@link VersionRange}.
14+
*/
15+
public class VersionRangeDeserializer extends JsonDeserializer<VersionRange> {
16+
17+
@Override
18+
public VersionRange deserialize(JsonParser p, DeserializationContext context) throws IOException, JacksonException {
19+
20+
JsonToken token = p.getCurrentToken();
21+
if (token == JsonToken.VALUE_STRING) {
22+
return VersionRange.of(p.getValueAsString());
23+
} else {
24+
throw new IllegalArgumentException("Invalid JSON for VersionRange!");
25+
}
26+
}
27+
28+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.devonfw.tools.ide.json;
2+
3+
import java.io.IOException;
4+
5+
import com.devonfw.tools.ide.version.VersionRange;
6+
import com.fasterxml.jackson.databind.DeserializationContext;
7+
import com.fasterxml.jackson.databind.KeyDeserializer;
8+
9+
/**
10+
* {@link KeyDeserializer} for {@link VersionRange}.
11+
*/
12+
public class VersionRangeKeyDeserializer extends KeyDeserializer {
13+
14+
@Override
15+
public Object deserializeKey(String key, DeserializationContext context) throws IOException {
16+
17+
return VersionRange.of(key);
18+
}
19+
20+
}

cli/src/main/java/com/devonfw/tools/ide/npm/NpmJsonObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.devonfw.tools.ide.npm;
22

3-
import com.devonfw.tools.ide.common.JsonObject;
3+
import com.devonfw.tools.ide.json.JsonObject;
44

55
/**
66
* {@link JsonObject} for Npm.

0 commit comments

Comments
 (0)