4
4
import org .json .JSONException ;
5
5
6
6
import java .math .BigDecimal ;
7
+ import java .util .ArrayList ;
8
+ import java .util .List ;
7
9
import java .util .Objects ;
8
10
9
11
import static java .lang .String .format ;
@@ -109,6 +111,8 @@ public static Builder builder() {
109
111
110
112
private final boolean requiresInteger ;
111
113
114
+ private final List <ValidationException > validationExceptions ;
115
+
112
116
public NumberSchema () {
113
117
this (builder ());
114
118
}
@@ -129,34 +133,36 @@ public NumberSchema(final Builder builder) {
129
133
this .requiresInteger = builder .requiresInteger ;
130
134
this .exclusiveMinimumLimit = builder .exclusiveMinimumLimit ;
131
135
this .exclusiveMaximumLimit = builder .exclusiveMaximumLimit ;
136
+ this .validationExceptions = new ArrayList <>();
132
137
}
133
138
134
139
private void checkMaximum (final double subject ) {
135
140
if (maximum != null ) {
136
141
if (exclusiveMaximum && maximum .doubleValue () <= subject ) {
137
- throw failure (subject + " is not less than " + maximum , "exclusiveMaximum" );
142
+ validationExceptions . add ( failure (subject + " is not less than " + maximum , "exclusiveMaximum" ) );
138
143
} else if (maximum .doubleValue () < subject ) {
139
- throw failure (subject + " is not less or equal to " + maximum , "maximum" );
144
+ validationExceptions . add ( failure (subject + " is not less or equal to " + maximum , "maximum" ) );
140
145
}
141
146
}
142
147
if (exclusiveMaximumLimit != null ) {
143
148
if (subject >= exclusiveMaximumLimit .doubleValue ()) {
144
- throw failure (format ("is not less than " + exclusiveMaximumLimit ), "exclusiveMaximum" );
149
+ validationExceptions .add (
150
+ failure (format ("is not less than " + exclusiveMaximumLimit ),"exclusiveMaximum" ));
145
151
}
146
152
}
147
153
}
148
154
149
155
private void checkMinimum (final double subject ) {
150
156
if (minimum != null ) {
151
157
if (exclusiveMinimum && subject <= minimum .doubleValue ()) {
152
- throw failure (subject + " is not greater than " + minimum , "exclusiveMinimum" );
158
+ validationExceptions . add ( failure (subject + " is not greater than " + minimum , "exclusiveMinimum" ) );
153
159
} else if (subject < minimum .doubleValue ()) {
154
- throw failure (subject + " is not greater or equal to " + minimum , "minimum" );
160
+ validationExceptions . add ( failure (subject + " is not greater or equal to " + minimum , "minimum" ) );
155
161
}
156
162
}
157
163
if (exclusiveMinimumLimit != null ) {
158
164
if (subject <= exclusiveMinimumLimit .doubleValue ()) {
159
- throw failure (subject + " is not greater than " + exclusiveMinimumLimit , "exclusiveMinimum" );
165
+ validationExceptions . add ( failure (subject + " is not greater than " + exclusiveMinimumLimit , "exclusiveMinimum" ) );
160
166
}
161
167
}
162
168
}
@@ -166,7 +172,7 @@ private void checkMultipleOf(final double subject) {
166
172
BigDecimal remainder = BigDecimal .valueOf (subject ).remainder (
167
173
BigDecimal .valueOf (multipleOf .doubleValue ()));
168
174
if (remainder .compareTo (BigDecimal .ZERO ) != 0 ) {
169
- throw failure (subject + " is not a multiple of " + multipleOf , "multipleOf" );
175
+ validationExceptions . add ( failure (subject + " is not a multiple of " + multipleOf , "multipleOf" ) );
170
176
}
171
177
}
172
178
}
@@ -206,9 +212,11 @@ public void validate(final Object subject) {
206
212
throw failure (Integer .class , subject );
207
213
}
208
214
double intSubject = ((Number ) subject ).doubleValue ();
215
+ validationExceptions .clear ();
209
216
checkMinimum (intSubject );
210
217
checkMaximum (intSubject );
211
218
checkMultipleOf (intSubject );
219
+ ValidationException .throwFor (this , validationExceptions );
212
220
}
213
221
}
214
222
0 commit comments