• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

devonfw / IDEasy / 20241902872

15 Dec 2025 05:44PM UTC coverage: 70.138% (-0.002%) from 70.14%
20241902872

push

github

web-flow
#1644: added JSON deserialization tests, implement + registered custom deserializer (#1656)

3970 of 6225 branches covered (63.78%)

Branch coverage included in aggregate %.

10160 of 13921 relevant lines covered (72.98%)

3.15 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.33
cli/src/main/java/com/devonfw/tools/ide/json/JsonMapping.java
1
package com.devonfw.tools.ide.json;
2

3
import java.io.IOException;
4

5
import com.devonfw.tools.ide.tool.pip.PypiObject;
6
import com.devonfw.tools.ide.tool.pip.PypiObjectJsonDeserializer;
7
import com.devonfw.tools.ide.tool.repository.CustomToolJson;
8
import com.devonfw.tools.ide.tool.repository.CustomToolJsonDeserializer;
9
import com.devonfw.tools.ide.tool.repository.CustomToolJsonSerializer;
10
import com.devonfw.tools.ide.tool.repository.CustomToolsJson;
11
import com.devonfw.tools.ide.tool.repository.CustomToolsJsonDeserializer;
12
import com.devonfw.tools.ide.tool.repository.CustomToolsJsonSerializer;
13
import com.devonfw.tools.ide.url.model.file.json.Cve;
14
import com.devonfw.tools.ide.url.model.file.json.CveJsonDeserializer;
15
import com.devonfw.tools.ide.url.model.file.json.ToolDependency;
16
import com.devonfw.tools.ide.url.model.file.json.ToolSecurity;
17
import com.devonfw.tools.ide.url.model.file.json.ToolSecurityJsonDeserializer;
18
import com.devonfw.tools.ide.version.VersionIdentifier;
19
import com.devonfw.tools.ide.version.VersionRange;
20
import com.fasterxml.jackson.annotation.JsonInclude;
21
import com.fasterxml.jackson.core.JsonParser;
22
import com.fasterxml.jackson.core.JsonToken;
23
import com.fasterxml.jackson.databind.DeserializationFeature;
24
import com.fasterxml.jackson.databind.ObjectMapper;
25
import com.fasterxml.jackson.databind.SerializationFeature;
26
import com.fasterxml.jackson.databind.module.SimpleModule;
27
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
28

29
/**
30
 * Simple factory for Jackson {@link ObjectMapper} to read and write JSON with centralized mapping configuration.
31
 */
32
public class JsonMapping {
×
33

34
  /**
35
   * @return a new instance of {@link ObjectMapper} pre-configured for reasonable JSON mapping.
36
   */
37
  public static ObjectMapper create() {
38

39
    ObjectMapper mapper = new ObjectMapper();
4✔
40
    mapper = mapper.registerModule(new JavaTimeModule());
6✔
41
    mapper = mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
5✔
42
    mapper = mapper.enable(SerializationFeature.INDENT_OUTPUT);
4✔
43
    mapper = mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
4✔
44
    mapper = mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
5✔
45
    SimpleModule customModule = new SimpleModule();
4✔
46
    customModule.addDeserializer(VersionIdentifier.class, new VersionIdentifierDeserializer());
7✔
47
    customModule.addDeserializer(VersionRange.class, new VersionRangeDeserializer());
7✔
48
    customModule.addSerializer(VersionRange.class, new VersionRangeSerializer());
7✔
49
    customModule.addKeyDeserializer(VersionRange.class, new VersionRangeKeyDeserializer());
7✔
50

51
    customModule.addDeserializer(ToolDependency.class, new ToolDependencyDeserializer());
7✔
52
    customModule.addDeserializer(ToolSecurity.class, new ToolSecurityJsonDeserializer());
7✔
53
    customModule.addDeserializer(Cve.class, new CveJsonDeserializer());
7✔
54

55
    customModule.addDeserializer(PypiObject.class, new PypiObjectJsonDeserializer());
7✔
56

57
    customModule.addDeserializer(CustomToolJson.class, new CustomToolJsonDeserializer());
7✔
58
    customModule.addSerializer(CustomToolJson.class, new CustomToolJsonSerializer());
7✔
59
    customModule.addDeserializer(CustomToolsJson.class, new CustomToolsJsonDeserializer());
7✔
60
    customModule.addSerializer(CustomToolsJson.class, new CustomToolsJsonSerializer());
7✔
61
    mapper = mapper.registerModule(customModule);
4✔
62
    return mapper;
2✔
63
  }
64

65
  /**
66
   * @param p the {@link JsonParser}.
67
   * @throws IOException in case of an error.
68
   */
69
  public static void skipCurrentField(JsonParser p) throws IOException {
70

71
    JsonToken jsonToken = p.nextToken();
3✔
72
    if ((jsonToken == JsonToken.START_OBJECT) || (jsonToken == JsonToken.START_ARRAY)) {
6!
73
      p.skipChildren();
3✔
74
    }
75
  }
1✔
76

77
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc