Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class BesuSignerMetric {
public BesuSignerMetric(
@JsonProperty(value = "address") final String address,
@JsonProperty(value = "proposedBlockCount") final String proposedBlockCount,
@JsonProperty(value = "name") final String lastProposedBlockNumber) {
@JsonProperty(value = "lastProposedBlockNumber") final String lastProposedBlockNumber) {
this.address = address;
this.proposedBlockCount = proposedBlockCount;
this.lastProposedBlockNumber = lastProposedBlockNumber;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@
*/
package org.web3j.protocol.besu.response.privacy;

import java.io.IOException;
import java.math.BigInteger;
import java.util.Objects;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.TreeNode;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import tools.jackson.core.JsonParser;
import tools.jackson.core.TreeNode;
import tools.jackson.databind.DeserializationContext;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.ValueDeserializer;
import tools.jackson.databind.annotation.JsonDeserialize;

import org.web3j.utils.Base64String;
import org.web3j.utils.Numeric;
Expand All @@ -29,24 +29,25 @@
@JsonDeserialize(using = PrivateTransaction.ResponseDeserialiser.class)
public abstract class PrivateTransaction {

public static class ResponseDeserialiser extends StdDeserializer<PrivateTransaction> {
public static class ResponseDeserialiser extends ValueDeserializer<PrivateTransaction> {

private final ObjectMapper objectMapper = new ObjectMapper();

protected ResponseDeserialiser() {
super(PrivateTransaction.class);
super();
}

@Override
public PrivateTransaction deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException {
public PrivateTransaction deserialize(JsonParser p, DeserializationContext ctxt) {
final TreeNode node = p.readValueAsTree();

// Select the concrete class based on the existence of a property
if (node.get("privateFor") != null && node.get("privateFor").isArray()) {
return p.getCodec().treeToValue(node, PrivateTransactionLegacy.class);
return objectMapper.convertValue(node, PrivateTransactionLegacy.class);
} else if ((node.get("privateFor") != null && node.get("privateFor").isValueNode())
|| (node.get("privacyGroupId") != null
&& node.get("privacyGroupId").isValueNode())) {
return p.getCodec().treeToValue(node, PrivateTransactionWithPrivacyGroup.class);
return objectMapper.convertValue(node, PrivateTransactionWithPrivacyGroup.class);
}

return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import tools.jackson.databind.ValueDeserializer;
import tools.jackson.databind.annotation.JsonDeserialize;

import org.web3j.utils.Base64String;

@JsonDeserialize(using = JsonDeserializer.None.class)
@JsonDeserialize(using = ValueDeserializer.None.class)
public class PrivateTransactionLegacy extends PrivateTransaction {

private List<Base64String> privateFor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import tools.jackson.databind.ValueDeserializer;
import tools.jackson.databind.annotation.JsonDeserialize;

import org.web3j.utils.Base64String;

@JsonDeserialize(using = JsonDeserializer.None.class)
@JsonDeserialize(using = ValueDeserializer.None.class)
public class PrivateTransactionWithPrivacyGroup extends PrivateTransaction {

private Base64String privacyGroupId;
Expand Down
9 changes: 5 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ plugins {

ext {
bouncycastleVersion = '1.80'
jacksonVersion = '2.17.1'
jacksonVersion = '3.1.0'
jacksonAnnotationsVersion = '2.17.1'
javaPoetVersion = '1.13.0'
kotlinVersion = '1.9.24'
kotlinPoetVersion = '1.16.0'
Expand Down Expand Up @@ -87,9 +88,9 @@ allprojects {
force(group: "org.jetbrains.kotlin", name: "kotlin-stdlib-common", version: kotlinVersion)
force(group: "org.jetbrains.kotlin", name: "kotlin-stdlib-jdk7", version: kotlinVersion)
force(group: "org.jetbrains.kotlin", name: "kotlin-stdlib-jdk8", version: kotlinVersion)
force(group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: jacksonVersion)
force(group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion)
force(group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: jacksonVersion)
force(group: 'tools.jackson.core', name: 'jackson-core', version: jacksonVersion)
force(group: 'tools.jackson.core', name: 'jackson-databind', version: jacksonVersion)
force(group: 'tools.jackson.core', name: 'jackson-annotations', version: jacksonAnnotationsVersion)
force(group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Modifier;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.CodeBlock;
Expand All @@ -45,6 +44,7 @@
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tools.jackson.databind.ObjectMapper;

import org.web3j.abi.EventEncoder;
import org.web3j.abi.FunctionEncoder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@
import java.util.Arrays;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
import tools.jackson.databind.ObjectMapper;

import org.web3j.abi.datatypes.Address;
import org.web3j.protocol.ObjectMapperFactory;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import picocli.CommandLine;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.ObjectMapper;

import org.web3j.abi.datatypes.Address;
import org.web3j.protocol.ObjectMapperFactory;
Expand Down
2 changes: 1 addition & 1 deletion core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ dependencies {
"com.squareup.okhttp3:logging-interceptor:$okhttpVersion",
"io.reactivex.rxjava2:rxjava:$rxjavaVersion",
"org.java-websocket:Java-WebSocket:$javaWebSocketVersion",
"com.fasterxml.jackson.core:jackson-databind:$jacksonVersion",
"tools.jackson.core:jackson-databind:$jacksonVersion",
"org.slf4j:slf4j-api:$slf4jVersion",
"io.github.adraffy:ens-normalize:$ensAdraffyVersion",
"io.consensys.tuweni:tuweni-bytes:$tuweniVersion",
Expand Down
24 changes: 11 additions & 13 deletions core/src/main/java/org/web3j/crypto/WalletFile.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,15 @@
*/
package org.web3j.crypto;

import java.io.IOException;

import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import tools.jackson.core.JsonParser;
import tools.jackson.databind.DeserializationContext;
import tools.jackson.databind.JsonNode;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.ValueDeserializer;
import tools.jackson.databind.node.ObjectNode;

/** Ethereum wallet file. */
public class WalletFile {
Expand Down Expand Up @@ -429,15 +427,15 @@ public int hashCode() {

// If we need to work with MyEtherWallet we'll need to use this deserializer, see the
// following issue https://github.com/kvhnuke/etherwallet/issues/269
static class KdfParamsDeserialiser extends JsonDeserializer<KdfParams> {
static class KdfParamsDeserialiser extends ValueDeserializer<KdfParams> {

private final ObjectMapper objectMapper = new ObjectMapper();

@Override
public KdfParams deserialize(
JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException {
JsonParser jsonParser, DeserializationContext deserializationContext) {

ObjectMapper objectMapper = (ObjectMapper) jsonParser.getCodec();
ObjectNode root = objectMapper.readTree(jsonParser);
ObjectNode root = jsonParser.readValueAsTree();
KdfParams kdfParams;

// it would be preferable to detect the class to use based on the kdf parameter in the
Expand Down
19 changes: 10 additions & 9 deletions core/src/main/java/org/web3j/crypto/WalletUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,10 @@
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.core.json.JsonReadFeature;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.json.JsonMapper;

import org.web3j.crypto.exception.CipherException;
import org.web3j.utils.Numeric;
Expand All @@ -36,14 +37,14 @@
/** Utility functions for working with Wallet files. */
public class WalletUtils {

private static final ObjectMapper objectMapper = new ObjectMapper();
private static final ObjectMapper objectMapper =
JsonMapper.builder()
.enable(JsonReadFeature.ALLOW_UNQUOTED_PROPERTY_NAMES)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
.build();
private static final SecureRandom secureRandom = SecureRandomUtils.secureRandom();

static {
objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}

public static String generateFullNewWalletFile(String password, File destinationDirectory)
throws NoSuchAlgorithmException,
NoSuchProviderException,
Expand Down
6 changes: 3 additions & 3 deletions core/src/main/java/org/web3j/ens/EnsMetadataResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
*/
package org.web3j.ens;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import tools.jackson.core.JacksonException;
import tools.jackson.databind.ObjectMapper;

public class EnsMetadataResponse {
public boolean is_normalized;
Expand Down Expand Up @@ -117,7 +117,7 @@ public static class Attribute {
public String toString() {
try {
return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this);
} catch (JsonProcessingException e) {
} catch (JacksonException e) {
return "Error serializing EnsMetadataResponse: " + e.getMessage();
}
}
Expand Down
9 changes: 4 additions & 5 deletions core/src/main/java/org/web3j/ens/EnsResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@
import java.util.List;
import java.util.stream.Collectors;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tools.jackson.core.JacksonException;
import tools.jackson.databind.ObjectMapper;

import org.web3j.abi.DefaultFunctionEncoder;
import org.web3j.abi.DefaultFunctionReturnDecoder;
Expand Down Expand Up @@ -299,7 +299,7 @@ protected String ccipReadFetch(List<String> urls, String sender, String data) {
Request request;
try {
request = buildRequest(url, sender, data);
} catch (JsonProcessingException | EnsResolutionException e) {
} catch (JacksonException | EnsResolutionException e) {
log.error(e.getMessage(), e);
break;
}
Expand Down Expand Up @@ -343,8 +343,7 @@ protected String ccipReadFetch(List<String> urls, String sender, String data) {
return null;
}

protected Request buildRequest(String url, String sender, String data)
throws JsonProcessingException {
protected Request buildRequest(String url, String sender, String data) throws JacksonException {
if (sender == null || !WalletUtils.isValidAddress(sender)) {
throw new EnsResolutionException("Sender address is null or not valid");
}
Expand Down
65 changes: 14 additions & 51 deletions core/src/main/java/org/web3j/protocol/ObjectMapperFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,69 +12,32 @@
*/
package org.web3j.protocol;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.DeserializationConfig;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
import com.fasterxml.jackson.databind.module.SimpleModule;

import org.web3j.protocol.core.Response;
import org.web3j.protocol.deserializer.RawResponseDeserializer;
import tools.jackson.core.json.JsonReadFeature;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.ObjectReader;
import tools.jackson.databind.json.JsonMapper;

/** Factory for managing our ObjectMapper instances. */
public class ObjectMapperFactory {

private static final ObjectMapper DEFAULT_OBJECT_MAPPER = new ObjectMapper();

static {
configureObjectMapper(DEFAULT_OBJECT_MAPPER, false);
}
private static final ObjectMapper DEFAULT_OBJECT_MAPPER = buildObjectMapper();

public static ObjectMapper getObjectMapper() {
return getObjectMapper(false);
}

public static ObjectMapper getObjectMapper(boolean shouldIncludeRawResponses) {
if (!shouldIncludeRawResponses) {
return DEFAULT_OBJECT_MAPPER;
}

return configureObjectMapper(new ObjectMapper(), true);
return buildObjectMapper();
}

public static ObjectReader getObjectReader() {
return DEFAULT_OBJECT_MAPPER.reader();
}

private static ObjectMapper configureObjectMapper(
ObjectMapper objectMapper, boolean shouldIncludeRawResponses) {
if (shouldIncludeRawResponses) {
SimpleModule module = new SimpleModule();
module.setDeserializerModifier(
new BeanDeserializerModifier() {
@Override
public JsonDeserializer<?> modifyDeserializer(
DeserializationConfig config,
BeanDescription beanDesc,
JsonDeserializer<?> deserializer) {
if (Response.class.isAssignableFrom(beanDesc.getBeanClass())) {
return new RawResponseDeserializer(deserializer);
}

return deserializer;
}
});

objectMapper.registerModule(module);
}

objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
private static ObjectMapper buildObjectMapper() {
JsonMapper.Builder builder =
JsonMapper.builder()
.enable(JsonReadFeature.ALLOW_UNQUOTED_PROPERTY_NAMES)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES);

return objectMapper;
return builder.build();
}
}
Loading
Loading