Skip to content

Commit c5bb33a

Browse files
Added basic Constraints-support
1 parent 8ec5869 commit c5bb33a

7 files changed

Lines changed: 557 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# 2.3.0
2+
3+
* Added [Jakarta Bean Validation Constraints](https://jakarta.ee/learn/docs/jakartaee-tutorial/current/beanvalidation/bean-validation/bean-validation.html#_using_jakarta_bean_validation_constraints) with Hibernate validator for entities.
4+
15
# 2.2.2
26

37
* Fixed NPE in EclipseSerializerRegisteringCopier

spring-data-eclipse-store/pom.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@
5454
<org.springframework.boot.version>3.3.4</org.springframework.boot.version>
5555
<org.eclipse.store.version>1.4.0</org.eclipse.store.version>
5656
<org.eclipse.serializer.version>1.4.0</org.eclipse.serializer.version>
57+
<hibernate-validator.version>8.0.1.Final</hibernate-validator.version>
58+
<jakarta.el-api.version>6.0.1</jakarta.el-api.version>
59+
<expressly.version>6.0.0-M1</expressly.version>
60+
<hibernate-core.version>6.6.1.Final</hibernate-core.version>
5761
</properties>
5862

5963
<repositories>
@@ -164,6 +168,31 @@
164168
</exclusion>
165169
</exclusions>
166170
</dependency>
171+
172+
<dependency>
173+
<groupId>jakarta.validation</groupId>
174+
<artifactId>jakarta.validation-api</artifactId>
175+
</dependency>
176+
<dependency>
177+
<groupId>org.hibernate.validator</groupId>
178+
<artifactId>hibernate-validator</artifactId>
179+
<version>${hibernate-validator.version}</version>
180+
</dependency>
181+
<dependency>
182+
<groupId>org.hibernate.orm</groupId>
183+
<artifactId>hibernate-core</artifactId>
184+
<version>${hibernate-core.version}</version>
185+
</dependency>
186+
<dependency>
187+
<groupId>jakarta.el</groupId>
188+
<artifactId>jakarta.el-api</artifactId>
189+
<version>${jakarta.el-api.version}</version>
190+
</dependency>
191+
<dependency>
192+
<groupId>org.glassfish.expressly</groupId>
193+
<artifactId>expressly</artifactId>
194+
<version>${expressly.version}</version>
195+
</dependency>
167196

168197
<dependency>
169198
<groupId>com.googlecode.cqengine</groupId>

spring-data-eclipse-store/src/main/java/software/xdev/spring/data/eclipse/store/repository/support/copier/registering/EclipseSerializerRegisteringCopier.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,16 @@
1818
import java.util.HashMap;
1919
import java.util.Map;
2020
import java.util.Queue;
21+
import java.util.Set;
2122
import java.util.concurrent.ConcurrentLinkedQueue;
2223
import java.util.function.Supplier;
24+
import java.util.stream.Collectors;
25+
26+
import jakarta.validation.ConstraintViolation;
27+
import jakarta.validation.ConstraintViolationException;
28+
import jakarta.validation.Validation;
29+
import jakarta.validation.Validator;
30+
import jakarta.validation.ValidatorFactory;
2331

2432
import org.eclipse.serializer.persistence.binary.types.Binary;
2533
import org.eclipse.serializer.persistence.binary.types.BinaryStorer;
@@ -45,6 +53,7 @@ public class EclipseSerializerRegisteringCopier implements AutoCloseable
4553
private final Supplier<PersistenceManager<Binary>> persistenceManagerSupplier;
4654
private final SupportedChecker supportedChecker;
4755
private final RegisteringWorkingCopyAndOriginal register;
56+
private final Validator validator;
4857

4958
public EclipseSerializerRegisteringCopier(
5059
final SupportedChecker supportedChecker,
@@ -55,6 +64,9 @@ public EclipseSerializerRegisteringCopier(
5564
this.register = register;
5665
this.persistenceManagerSupplier = persistenceManagerSupplier;
5766
this.persistenceManagers = new ConcurrentLinkedQueue<>();
67+
68+
final ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
69+
this.validator = validatorFactory.getValidator();
5870
}
5971

6072
private PersistenceManager<Binary> ensurePersistenceManager()
@@ -138,9 +150,25 @@ private <T> T copy(final T source, final PersistenceManager<Binary> persistenceM
138150
{
139151
return;
140152
}
141-
if(copiedObject != null && !this.supportedChecker.isSupported(copiedObject.getClass()))
153+
if(copiedObject != null)
142154
{
143-
throw new DataTypeNotSupportedException(copiedObject.getClass());
155+
if(!this.supportedChecker.isSupported(copiedObject.getClass()))
156+
{
157+
throw new DataTypeNotSupportedException(copiedObject.getClass());
158+
}
159+
final Set<ConstraintViolation<Object>> violations = this.validator.validate(copiedObject);
160+
if(!violations.isEmpty())
161+
{
162+
final String violationsAsMessage = violations.stream()
163+
.map(cv -> cv == null ? "null" : cv.getPropertyPath() + ": " + cv.getMessage())
164+
.collect(Collectors.joining(", "));
165+
166+
throw new ConstraintViolationException(
167+
"Error validating " + copiedObject.getClass().getName() + ":" + System.lineSeparator()
168+
+ violationsAsMessage,
169+
violations
170+
);
171+
}
144172
}
145173
summarizer.incrementCopiedObjectsCount();
146174
if(DataTypeUtil.isPrimitiveType(copiedObject.getClass()))

0 commit comments

Comments
 (0)