diff --git a/ocpp-jaxb/pom.xml b/ocpp-jaxb/pom.xml
index 602ae9f..bcdeb05 100644
--- a/ocpp-jaxb/pom.xml
+++ b/ocpp-jaxb/pom.xml
@@ -32,10 +32,16 @@
${basedir}/src/main/resources/wsdl-binding/add_interface.xml
+ -verbose
+ -frontend
+ krasa
+ -xjc-XReplacePrimitives
+ -xjc-XJsr303Annotations
+ -xjc-XJsr303Annotations:validationAnnotations=jakarta
+
-xjc-Xfluent-api
-xjc-Xinheritance
-xjc-Xannotate
-
-exsh
true
@@ -66,6 +72,12 @@
jaxb-plugin-annotate
4.0.8
+
+
+ com.fillumina
+ krasa-jaxb-tools
+ 2.5.1
+
diff --git a/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanDeserializerModifierWithValidation.java b/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanDeserializerModifierWithValidation.java
new file mode 100644
index 0000000..211a0de
--- /dev/null
+++ b/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanDeserializerModifierWithValidation.java
@@ -0,0 +1,31 @@
+package de.rwth.idsg.ocpp.jaxb.validation;
+
+import lombok.RequiredArgsConstructor;
+import tools.jackson.databind.BeanDescription.Supplier;
+import tools.jackson.databind.DeserializationConfig;
+import tools.jackson.databind.ValueDeserializer;
+import tools.jackson.databind.deser.ValueDeserializerModifier;
+import tools.jackson.databind.deser.bean.BeanDeserializer;
+
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
+
+/**
+ * https://www.baeldung.com/java-object-validation-deserialization
+ */
+@RequiredArgsConstructor
+public class BeanDeserializerModifierWithValidation extends ValueDeserializerModifier {
+
+ private final Validator validator;
+
+ @Override
+ public ValueDeserializer> modifyDeserializer(DeserializationConfig config,
+ Supplier beanDescRef,
+ ValueDeserializer> deserializer) {
+ if (deserializer instanceof BeanDeserializer) {
+ return new BeanDeserializerWithValidation((BeanDeserializer) deserializer, validator);
+ }
+
+ return deserializer;
+ }
+}
diff --git a/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanDeserializerWithValidation.java b/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanDeserializerWithValidation.java
new file mode 100644
index 0000000..895563c
--- /dev/null
+++ b/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanDeserializerWithValidation.java
@@ -0,0 +1,34 @@
+package de.rwth.idsg.ocpp.jaxb.validation;
+
+import tools.jackson.core.JacksonException;
+import tools.jackson.core.JsonParser;
+import tools.jackson.databind.DeserializationContext;
+import tools.jackson.databind.deser.bean.BeanDeserializer;
+
+import jakarta.validation.ConstraintViolationException;
+import jakarta.validation.Validator;
+
+/**
+ * https://www.baeldung.com/java-object-validation-deserialization
+ */
+public class BeanDeserializerWithValidation extends BeanDeserializer {
+
+ private final Validator validator;
+
+ public BeanDeserializerWithValidation(BeanDeserializer src, Validator validator) {
+ super(src);
+ this.validator = validator;
+ }
+
+ @Override
+ public Object deserialize(JsonParser p, DeserializationContext ctxt) throws JacksonException {
+ var instance = super.deserialize(p, ctxt);
+
+ var violations = validator.validate(instance);
+ if (!violations.isEmpty()) {
+ throw new ConstraintViolationException(violations);
+ }
+
+ return instance;
+ }
+}
diff --git a/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanSerializerModifierWithValidation.java b/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanSerializerModifierWithValidation.java
new file mode 100644
index 0000000..4d4b18a
--- /dev/null
+++ b/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanSerializerModifierWithValidation.java
@@ -0,0 +1,27 @@
+package de.rwth.idsg.ocpp.jaxb.validation;
+
+import lombok.RequiredArgsConstructor;
+import tools.jackson.databind.BeanDescription;
+import tools.jackson.databind.SerializationConfig;
+import tools.jackson.databind.ValueSerializer;
+import tools.jackson.databind.ser.ValueSerializerModifier;
+import tools.jackson.databind.ser.bean.BeanSerializerBase;
+
+import jakarta.validation.Validator;
+
+@RequiredArgsConstructor
+public class BeanSerializerModifierWithValidation extends ValueSerializerModifier {
+
+ private final Validator validator;
+
+ @Override
+ public ValueSerializer> modifySerializer(SerializationConfig config,
+ BeanDescription.Supplier beanDesc,
+ ValueSerializer> serializer) {
+ if (serializer instanceof BeanSerializerBase) {
+ return new BeanSerializerWithValidation((BeanSerializerBase) serializer, validator);
+ }
+
+ return serializer;
+ }
+}
diff --git a/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanSerializerWithValidation.java b/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanSerializerWithValidation.java
new file mode 100644
index 0000000..bbeeee5
--- /dev/null
+++ b/ocpp-jaxb/src/main/java/de/rwth/idsg/ocpp/jaxb/validation/BeanSerializerWithValidation.java
@@ -0,0 +1,29 @@
+package de.rwth.idsg.ocpp.jaxb.validation;
+
+import lombok.RequiredArgsConstructor;
+import tools.jackson.core.JacksonException;
+import tools.jackson.core.JsonGenerator;
+import tools.jackson.databind.SerializationContext;
+import tools.jackson.databind.ValueSerializer;
+import tools.jackson.databind.ser.bean.BeanSerializerBase;
+
+import jakarta.validation.ConstraintViolationException;
+import jakarta.validation.Validator;
+
+@RequiredArgsConstructor
+public class BeanSerializerWithValidation extends ValueSerializer