Skip to content

Commit 3f9974f

Browse files
authored
Fix broken unwrap bean validation and adapt tests (#50)
1 parent 7812ac5 commit 3f9974f

4 files changed

Lines changed: 9 additions & 26 deletions

File tree

src/main/java/org/openapitools/jackson/nullable/JsonNullableJakartaValueExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
public class JsonNullableJakartaValueExtractor implements ValueExtractor<JsonNullable<@ExtractedValue ?>> {
1212
@Override
1313
public void extractValues(JsonNullable<?> originalValue, ValueReceiver receiver) {
14-
JsonNullableValueExtractorHelper.extractValues(originalValue, receiver::indexedValue, receiver::value);
14+
JsonNullableValueExtractorHelper.extractValues(originalValue, receiver::value);
1515
}
1616
}

src/main/java/org/openapitools/jackson/nullable/JsonNullableValueExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@
1111
public class JsonNullableValueExtractor implements ValueExtractor<JsonNullable<@ExtractedValue ?>> {
1212
@Override
1313
public void extractValues(JsonNullable<?> originalValue, ValueReceiver receiver) {
14-
JsonNullableValueExtractorHelper.extractValues(originalValue, receiver::indexedValue, receiver::value);
14+
JsonNullableValueExtractorHelper.extractValues(originalValue, receiver::value);
1515
}
1616
}

src/main/java/org/openapitools/jackson/nullable/JsonNullableValueExtractorHelper.java

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,12 @@
11
package org.openapitools.jackson.nullable;
22

3-
import java.util.Collection;
4-
53
abstract class JsonNullableValueExtractorHelper {
6-
public static void extractValues(JsonNullable<?> originalValue, IndexedValueSetter indexedValueSetter, ValueSetter valueSetter) {
4+
public static void extractValues(JsonNullable<?> originalValue, ValueSetter valueSetter) {
75
if (originalValue.isPresent()) {
8-
Object unwrapped = originalValue.get();
9-
if (unwrapped instanceof Collection<?>) {
10-
Collection<?> unwrappedList = (Collection<?>) unwrapped;
11-
Object[] objects = unwrappedList.toArray();
12-
for (int i = 0; i < objects.length; i++) {
13-
indexedValueSetter.apply("<list element>", i, objects[i]);
14-
}
15-
} else {
16-
valueSetter.apply(null, originalValue.get());
17-
}
6+
valueSetter.apply(null, originalValue.get());
187
}
198
}
209

21-
@FunctionalInterface
22-
interface IndexedValueSetter {
23-
void apply(String var1, int var2, Object var3);
24-
}
25-
2610
@FunctionalInterface
2711
interface ValueSetter {
2812
void apply(String var1, Object var2);

src/test/java/org/openapitools/jackson/nullable/JsonNullableValueExtractorTest.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,9 @@ public void testValidationIsAppliedOnDefinedValue_whenNullValueExtracted() {
5757
Set<ConstraintViolation<UnitIssue3>> violations = validator.validate(unitIssue);
5858
assertEquals(1, violations.size());
5959
}
60-
61-
// ensure that JsonNullable<Collection<T>> gets unwrapped and the collection items are validated as well
60+
6261
@Test
63-
public void testUnwrapList() {
62+
public void testCollection() {
6463
Car aCar = new Car();
6564

6665
// test for java.util.List
@@ -76,7 +75,7 @@ public void testUnwrapList() {
7675
assertEquals(3, validationResult.size());
7776
assertTrue(validationResult.stream().anyMatch(c -> c.getPropertyPath().toString().equals("wheels[1].screws") && c.getConstraintDescriptor().getAnnotation().annotationType().getSimpleName().equals("NotNull")));
7877
assertTrue(validationResult.stream().anyMatch(c -> c.getPropertyPath().toString().equals("wheels[3].screws") && c.getConstraintDescriptor().getAnnotation().annotationType().getSimpleName().equals("NotNull")));
79-
assertTrue(validationResult.stream().anyMatch(c -> c.getPropertyPath().toString().equals("persons[0].role") && c.getConstraintDescriptor().getAnnotation().annotationType().getSimpleName().equals("NotNull")));
78+
assertTrue(validationResult.stream().anyMatch(c -> c.getPropertyPath().toString().equals("persons[].role") && c.getConstraintDescriptor().getAnnotation().annotationType().getSimpleName().equals("NotNull")));
8079
}
8180

8281

@@ -120,10 +119,10 @@ public void setNotNullString(String value) {
120119

121120
private static class Car {
122121
@Valid
123-
private JsonNullable<List<Wheel>> wheels = JsonNullable.undefined();
122+
private JsonNullable<List<@Valid Wheel>> wheels = JsonNullable.undefined();
124123

125124
@Valid
126-
private JsonNullable<Set<Person>> persons = JsonNullable.undefined();
125+
private JsonNullable<Set<@Valid Person>> persons = JsonNullable.undefined();
127126

128127
public void addWheel(Wheel wheel) {
129128
if (wheels == null || !wheels.isPresent()) {

0 commit comments

Comments
 (0)