Skip to content

Commit eeb48cc

Browse files
committed
refactor to use BeanDeserializerBase, DelegatingDeserializer
1 parent 2692b96 commit eeb48cc

File tree

2 files changed

+31
-18
lines changed

2 files changed

+31
-18
lines changed

ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanDeserializerModifierWithValidation.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
import tools.jackson.databind.DeserializationConfig;
66
import tools.jackson.databind.ValueDeserializer;
77
import tools.jackson.databind.deser.ValueDeserializerModifier;
8-
import tools.jackson.databind.deser.bean.BeanDeserializer;
8+
import tools.jackson.databind.deser.bean.BeanDeserializerBase;
99

10-
import jakarta.validation.Validation;
1110
import jakarta.validation.Validator;
1211

1312
/**
@@ -22,8 +21,8 @@ public class BeanDeserializerModifierWithValidation extends ValueDeserializerMod
2221
public ValueDeserializer<?> modifyDeserializer(DeserializationConfig config,
2322
Supplier beanDescRef,
2423
ValueDeserializer<?> deserializer) {
25-
if (deserializer instanceof BeanDeserializer) {
26-
return new BeanDeserializerWithValidation((BeanDeserializer) deserializer, validator);
24+
if (deserializer instanceof BeanDeserializerBase) {
25+
return new BeanDeserializerWithValidation((BeanDeserializerBase) deserializer, validator);
2726
}
2827

2928
return deserializer;

ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanDeserializerWithValidation.java

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,46 @@
33
import tools.jackson.core.JacksonException;
44
import tools.jackson.core.JsonParser;
55
import tools.jackson.databind.DeserializationContext;
6-
import tools.jackson.databind.deser.bean.BeanDeserializer;
6+
import tools.jackson.databind.ValueDeserializer;
7+
import tools.jackson.databind.deser.bean.BeanDeserializerBase;
8+
import tools.jackson.databind.deser.std.DelegatingDeserializer;
79

810
import jakarta.validation.ConstraintViolationException;
911
import jakarta.validation.Validator;
1012

1113
/**
1214
* https://www.baeldung.com/java-object-validation-deserialization
1315
*/
14-
public class BeanDeserializerWithValidation extends BeanDeserializer {
16+
public class BeanDeserializerWithValidation extends DelegatingDeserializer {
1517

16-
private final Validator validator;
17-
18-
public BeanDeserializerWithValidation(BeanDeserializer src, Validator validator) {
19-
super(src);
20-
this.validator = validator;
18+
public BeanDeserializerWithValidation(BeanDeserializerBase d, Validator validator) {
19+
super(create(d, validator));
2120
}
2221

2322
@Override
24-
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws JacksonException {
25-
var instance = super.deserialize(p, ctxt);
23+
protected ValueDeserializer<?> newDelegatingInstance(ValueDeserializer<?> newDelegatee) {
24+
return newDelegatee;
25+
}
26+
27+
private static ValueDeserializer<?> create(ValueDeserializer<?> delegate, Validator validator) {
28+
return new ValueDeserializer<>() {
29+
30+
@Override
31+
public Class<?> handledType() {
32+
return delegate.handledType(); // otherwise NPE in constructor of DelegatingDeserializer
33+
}
34+
35+
@Override
36+
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws JacksonException {
37+
var instance = delegate.deserialize(p, ctxt);
2638

27-
var violations = validator.validate(instance);
28-
if (!violations.isEmpty()) {
29-
throw new ConstraintViolationException(violations);
30-
}
39+
var violations = validator.validate(instance);
40+
if (!violations.isEmpty()) {
41+
throw new ConstraintViolationException(violations);
42+
}
3143

32-
return instance;
44+
return instance;
45+
}
46+
};
3347
}
3448
}

0 commit comments

Comments
 (0)