Skip to content

Commit

Permalink
Merge branch '2.17'
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed Mar 12, 2024
2 parents 2b7eb1c + 52c5fdc commit b4eb371
Showing 1 changed file with 93 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
package tools.jackson.failing;

import java.util.Iterator;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

import tools.jackson.core.*;

import tools.jackson.databind.*;
import tools.jackson.databind.deser.BeanDeserializerBuilder;
import tools.jackson.databind.deser.SettableBeanProperty;
import tools.jackson.databind.deser.ValueDeserializerModifier;
import tools.jackson.databind.module.SimpleModule;
import tools.jackson.databind.testutil.DatabindTestUtil;

import static org.junit.jupiter.api.Assertions.assertEquals;

// [databind#4356]
public class BeanDeserializerModifier4356Test
extends DatabindTestUtil
{
static class MutableBean4356 {
String a;

public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
}

static class ImmutableBean4356 {
final String a;

@JsonCreator
public ImmutableBean4356(@JsonProperty("a") String a) {
this.a = a;
}

public String getA() {
return a;
}
}

@SuppressWarnings("serial")
static SimpleModule getSimpleModuleWithDeserializerModifier() {
return new SimpleModule().setDeserializerModifier(new ValueDeserializerModifier() {
@Override
public BeanDeserializerBuilder updateBuilder(DeserializationConfig config, BeanDescription beanDesc, BeanDeserializerBuilder builder) {
for (Iterator<SettableBeanProperty> properties = builder.getProperties(); properties.hasNext();) {
SettableBeanProperty property = properties.next();
if (property.getName().equals("a")) {
builder.addOrReplaceProperty(property.withValueDeserializer(new ConvertingStringDeserializer()), true);
}
}
return builder;
}
});
}


static final String CUSTOM_DESERIALIZER_VALUE = "Custom deserializer value";

static class ConvertingStringDeserializer extends ValueDeserializer<String> {
@Override
public String deserialize(JsonParser p, DeserializationContext ctxt) {
p.skipChildren();
return CUSTOM_DESERIALIZER_VALUE;
}
}

private final ObjectMapper MAPPER = jsonMapperBuilder().addModule(getSimpleModuleWithDeserializerModifier()).build();

@Test // passes
public void testMutableBeanUpdateBuilder() throws Exception {
MutableBean4356 recreatedBean = MAPPER.readValue("{\"a\": \"Some value\"}",
MutableBean4356.class);

assertEquals(CUSTOM_DESERIALIZER_VALUE, recreatedBean.getA());
}

@Test // Fails without fix
public void testImmutableBeanUpdateBuilder() throws Exception {
ImmutableBean4356 recreatedBean = MAPPER.readValue("{\"a\": \"Some value\"}",
ImmutableBean4356.class);

assertEquals(CUSTOM_DESERIALIZER_VALUE, recreatedBean.getA());
}
}

0 comments on commit b4eb371

Please sign in to comment.