Skip to content

Commit 454b81e

Browse files
committed
improve bean validation impl for deser
1 parent 2692b96 commit 454b81e

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
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(deserializer, validator);
2726
}
2827

2928
return deserializer;

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

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,55 @@
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.std.DelegatingDeserializer;
8+
import tools.jackson.databind.jsontype.TypeDeserializer;
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

1618
private final Validator validator;
1719

18-
public BeanDeserializerWithValidation(BeanDeserializer src, Validator validator) {
19-
super(src);
20+
protected BeanDeserializerWithValidation(ValueDeserializer<?> delegate, Validator validator) {
21+
super(delegate);
2022
this.validator = validator;
2123
}
2224

2325
@Override
24-
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws JacksonException {
25-
var instance = super.deserialize(p, ctxt);
26+
protected ValueDeserializer<?> newDelegatingInstance(ValueDeserializer<?> newDelegate) {
27+
return new BeanDeserializerWithValidation(newDelegate, validator);
28+
}
29+
30+
@Override
31+
public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) {
32+
Object instance = super.deserialize(jsonParser, deserializationContext);
33+
validate(instance);
34+
return instance;
35+
}
2636

27-
var violations = validator.validate(instance);
37+
@Override
38+
public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext, Object bean) {
39+
Object instance = super.deserialize(jsonParser, deserializationContext, bean);
40+
validate(instance);
41+
return instance;
42+
}
43+
44+
@Override
45+
public Object deserializeWithType(JsonParser p, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws JacksonException {
46+
Object instance = super.deserializeWithType(p, ctxt, typeDeserializer);
47+
validate(instance);
48+
return instance;
49+
}
50+
51+
private <T> void validate(T object) {
52+
var violations = validator.validate(object);
2853
if (!violations.isEmpty()) {
2954
throw new ConstraintViolationException(violations);
3055
}
31-
32-
return instance;
3356
}
3457
}

0 commit comments

Comments
 (0)