Skip to content

Commit

Permalink
refactor: adapt code following the removal of deprecated methods
Browse files Browse the repository at this point in the history
Jackson 2.16 has removed several deprecated methods. We were massively
using DeserializationContext#mappingException, but this one has been
deprecated since Jackson 2.9
As an alternative, I used JsonMappingException#from to create the same
exception that were created with the deprecated method.
  • Loading branch information
jgiovaresco committed Mar 1, 2024
1 parent 65115b3 commit 319ce95
Show file tree
Hide file tree
Showing 16 changed files with 74 additions and 56 deletions.
Expand Up @@ -20,6 +20,7 @@
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import io.gravitee.definition.model.*;
Expand Down Expand Up @@ -57,14 +58,14 @@ public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOExcept
public T deserialize(JsonParser jp, DeserializationContext ctxt, T api, JsonNode node) throws IOException {
JsonNode idNode = node.get("id");
if (idNode == null) {
throw ctxt.mappingException("ID property is required");
throw JsonMappingException.from(ctxt, "ID property is required");
} else {
api.setId(idNode.asText());
}

JsonNode nameNode = node.get("name");
if (nameNode == null) {
throw ctxt.mappingException("Name property is required");
throw JsonMappingException.from(ctxt, "Name property is required");
} else {
api.setName(nameNode.asText());
}
Expand All @@ -82,7 +83,7 @@ public T deserialize(JsonParser jp, DeserializationContext ctxt, T api, JsonNode
api.setProxy(proxyNode.traverse(jp.getCodec()).readValueAs(Proxy.class));
} else {
logger.error("A proxy property is required for {}", api.getName());
throw ctxt.mappingException("A proxy property is required for " + api.getName());
throw JsonMappingException.from(ctxt, "A proxy property is required for " + api.getName());
}

JsonNode servicesNode = node.get("services");
Expand Down Expand Up @@ -114,7 +115,7 @@ public T deserialize(JsonParser jp, DeserializationContext ctxt, T api, JsonNode
if (!api.getResources().contains(resource)) {
api.getResources().add(resource);
} else {
throw ctxt.mappingException("A resource already exists with name " + resource.getName());
throw JsonMappingException.from(ctxt, "A resource already exists with name " + resource.getName());
}
} catch (IOException e) {
logger.error("An error occurred during api deserialization", e);
Expand All @@ -130,7 +131,7 @@ public T deserialize(JsonParser jp, DeserializationContext ctxt, T api, JsonNode

if (api.getDefinitionVersion() == DefinitionVersion.V1) {
if (node.get("flows") != null) {
throw ctxt.mappingException("Flows are only available for definition >= 2.x.x ");
throw JsonMappingException.from(ctxt, "Flows are only available for definition >= 2.x.x ");
}

JsonNode pathsNode = node.get("paths");
Expand All @@ -153,7 +154,7 @@ public T deserialize(JsonParser jp, DeserializationContext ctxt, T api, JsonNode

if (api.getDefinitionVersion() == DefinitionVersion.V2) {
if (node.get("paths") != null) {
throw ctxt.mappingException("Paths are only available for definition 1.x.x ");
throw JsonMappingException.from(ctxt, "Paths are only available for definition 1.x.x ");
}

JsonNode flowsNode = node.get("flows");
Expand Down
Expand Up @@ -15,24 +15,14 @@
*/
package io.gravitee.definition.jackson.datatype.api.deser;

import static java.util.Comparator.reverseOrder;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import io.gravitee.definition.model.*;
import io.gravitee.definition.model.Properties;
import io.gravitee.definition.model.flow.Consumer;
import io.gravitee.definition.model.flow.ConsumerType;
import io.gravitee.definition.model.flow.Flow;
import io.gravitee.definition.model.plugins.resources.Resource;
import io.gravitee.definition.model.services.Services;
import io.gravitee.definition.model.services.discovery.EndpointDiscoveryService;
import java.io.IOException;
import java.util.*;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -58,7 +48,7 @@ public Consumer deserialize(JsonParser jp, DeserializationContext ctxt) throws I

JsonNode consumerIdNode = node.get("consumerId");
if (consumerIdNode == null) {
throw ctxt.mappingException("Consumer ID property is required");
throw JsonMappingException.from(ctxt, "Consumer ID property is required");
} else {
consumer.setConsumerId(consumerIdNode.asText());
}
Expand Down
Expand Up @@ -19,6 +19,7 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import io.gravitee.definition.model.Api;
Expand All @@ -45,15 +46,15 @@ public DebugApiDeserializer(Class<?> vc) {
}

@Override
public DebugApi deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
public DebugApi deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
JsonNode node = jp.getCodec().readTree(jp);
DebugApi debugApi = (DebugApi) this.base.deserialize(jp, ctxt, new DebugApi(), node);
JsonNode requestNode = node.get("request");
if (requestNode != null) {
debugApi.setRequest(requestNode.traverse(jp.getCodec()).readValueAs(HttpRequest.class));
} else {
logger.error("A request property is required for {}", debugApi.getName());
throw ctxt.mappingException("A request property is required for " + debugApi.getName());
throw JsonMappingException.from(ctxt, "A request property is required for " + debugApi.getName());
}

JsonNode responseNode = node.get("response");
Expand Down
Expand Up @@ -18,17 +18,20 @@
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.gravitee.definition.jackson.datatype.GraviteeMapper;
import io.gravitee.definition.model.Endpoint;
import io.gravitee.definition.model.ssl.pem.PEMTrustStore;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author David BRASSELY (david.brassely at graviteesource.com)
Expand All @@ -53,14 +56,14 @@ public Endpoint deserialize(JsonParser parser, DeserializationContext ctxt) thro
if (nameNode != null) {
name = nameNode.asText();
} else {
throw ctxt.mappingException("Endpoint name is required");
throw JsonMappingException.from(ctxt, "Endpoint name is required");
}

JsonNode targetNode = node.get("target");
if (targetNode != null) {
target = targetNode.asText();
} else {
throw ctxt.mappingException("Endpoint target is required");
throw JsonMappingException.from(ctxt, "Endpoint target is required");
}

JsonNode typeNode = node.get("type");
Expand Down
Expand Up @@ -16,17 +16,29 @@
package io.gravitee.definition.jackson.datatype.api.deser;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import io.gravitee.common.http.HttpHeader;
import io.gravitee.common.http.HttpHeaders;
import io.gravitee.definition.model.*;
import io.gravitee.definition.model.Endpoint;
import io.gravitee.definition.model.EndpointGroup;
import io.gravitee.definition.model.HttpClientOptions;
import io.gravitee.definition.model.HttpClientSslOptions;
import io.gravitee.definition.model.HttpProxy;
import io.gravitee.definition.model.LoadBalancer;
import io.gravitee.definition.model.services.Services;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

/**
Expand All @@ -42,7 +54,7 @@ public EndpointGroupDeserializer(Class<EndpointGroup> vc) {
}

@Override
public EndpointGroup deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
public EndpointGroup deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
JsonNode node = jp.getCodec().readTree(jp);

final EndpointGroup group = new EndpointGroup();
Expand All @@ -61,7 +73,7 @@ public EndpointGroup deserialize(JsonParser jp, DeserializationContext ctxt) thr
if (endpoint != null) {
boolean added = endpoints.add(endpoint);
if (!added) {
throw ctxt.mappingException("[api] API endpoint names must be unique");
throw JsonMappingException.from(ctxt, "[api] API endpoint names must be unique");
}
}
}
Expand Down
Expand Up @@ -17,6 +17,7 @@

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import io.gravitee.definition.model.Property;
import java.io.IOException;
Expand All @@ -40,14 +41,14 @@ public Property deserialize(JsonParser jp, DeserializationContext ctxt) throws I

JsonNode keyNode = node.get("key");
if (keyNode == null) {
throw ctxt.mappingException("Key property is required");
throw JsonMappingException.from(ctxt, "Key property is required");
} else {
key = keyNode.asText();
}

JsonNode valueNode = node.get("value");
if (valueNode == null) {
throw ctxt.mappingException("Value property is required");
throw JsonMappingException.from(ctxt, "Value property is required");
} else {
value = valueNode.asText();
}
Expand Down
Expand Up @@ -17,6 +17,7 @@

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import io.gravitee.definition.model.plugins.resources.Resource;
Expand All @@ -42,21 +43,21 @@ public Resource deserialize(JsonParser jp, DeserializationContext ctxt) throws I
if (nameNode != null) {
resource.setName(nameNode.asText());
} else {
throw ctxt.mappingException("[resource] Name is required");
throw JsonMappingException.from(ctxt, "[resource] Name is required");
}

final JsonNode typeNode = node.get("type");
if (typeNode != null) {
resource.setType(typeNode.asText());
} else {
throw ctxt.mappingException("[resource] Type is required");
throw JsonMappingException.from(ctxt, "[resource] Type is required");
}

final JsonNode configurationNode = node.get("configuration");
if (configurationNode != null) {
resource.setConfiguration(configurationNode.toString());
} else {
throw ctxt.mappingException("[resource] Configuration is required");
throw JsonMappingException.from(ctxt, "[resource] Configuration is required");
}

final JsonNode enabledNode = node.get("enabled");
Expand Down
Expand Up @@ -18,6 +18,7 @@
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import io.gravitee.definition.model.services.schedule.ScheduledService;
import java.io.IOException;
Expand All @@ -36,8 +37,7 @@ public ScheduledServiceDeserializer(Class<T> vc) {
}

@Override
protected void deserialize(T service, JsonParser jsonParser, JsonNode node, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
protected void deserialize(T service, JsonParser jsonParser, JsonNode node, DeserializationContext ctxt) throws IOException {
super.deserialize(service, jsonParser, node, ctxt);

final JsonNode scheduleNode = node.get("schedule");
Expand All @@ -54,14 +54,14 @@ protected void deserialize(T service, JsonParser jsonParser, JsonNode node, Dese
if (rateNode != null) {
rate = rateNode.asLong();
} else {
throw ctxt.mappingException("[scheduled-service] Rate is required");
throw JsonMappingException.from(ctxt, "[scheduled-service] Rate is required");
}

final JsonNode unitNode = triggerNode.get("unit");
if (unitNode != null) {
unit = TimeUnit.valueOf(unitNode.asText().toUpperCase());
} else {
throw ctxt.mappingException("[scheduled-service] Unit is required");
throw JsonMappingException.from(ctxt, "[scheduled-service] Unit is required");
}
} else if (node.has("interval")) {
// Ensure backward compatibility
Expand All @@ -74,7 +74,7 @@ protected void deserialize(T service, JsonParser jsonParser, JsonNode node, Dese
if (unitNode != null) {
unit = TimeUnit.valueOf(unitNode.asText().toUpperCase());
} else {
throw ctxt.mappingException("[scheduled-service] Unit is required");
throw JsonMappingException.from(ctxt, "[scheduled-service] Unit is required");
}
}
}
Expand Down
Expand Up @@ -18,6 +18,7 @@
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import io.gravitee.definition.model.Service;
Expand All @@ -44,7 +45,7 @@ public T deserialize(JsonParser jsonParser, DeserializationContext deserializati

return service;
} catch (Exception ex) {
throw deserializationContext.mappingException(ex.getMessage());
throw JsonMappingException.from(deserializationContext, ex.getMessage());
}
}

Expand Down
Expand Up @@ -18,6 +18,7 @@
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
import io.gravitee.definition.model.Service;
Expand All @@ -27,7 +28,11 @@
import io.gravitee.definition.model.services.healthcheck.HealthCheckService;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
* @author David BRASSELY (david.brassely at graviteesource.com)
Expand Down Expand Up @@ -78,7 +83,7 @@ public Type getType() {
}
}
} catch (IOException ioe) {
throw ctxt.mappingException(ioe.getMessage());
throw JsonMappingException.from(ctxt, ioe.getMessage());
}
}

Expand Down
Expand Up @@ -17,6 +17,7 @@

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import io.gravitee.definition.jackson.datatype.services.core.deser.ServiceDeserializer;
import io.gravitee.definition.jackson.datatype.services.discovery.EndpointDiscoveryProviderMapper;
Expand Down Expand Up @@ -45,7 +46,7 @@ protected void deserialize(EndpointDiscoveryService service, JsonParser jsonPars
String providerPlugin = EndpointDiscoveryProviderMapper.getProvider(provider);
service.setProvider(providerPlugin);
} else {
throw ctxt.mappingException("[endpoint-discovery] Provider is required");
throw JsonMappingException.from(ctxt, "[endpoint-discovery] Provider is required");
}

service.setConfiguration(node.get("configuration").toString());
Expand Down

0 comments on commit 319ce95

Please sign in to comment.