2525import java .util .HashSet ;
2626import java .util .List ;
2727import java .util .Set ;
28+ import java .util .stream .Collectors ;
2829
2930public class OneOfValidator extends BaseJsonValidator implements JsonValidator {
3031 private static final Logger logger = LoggerFactory .getLogger (RequiredValidator .class );
@@ -45,21 +46,33 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
4546 debug (logger , node , rootNode , at );
4647
4748 int numberOfValidSchema = 0 ;
48-
49+ Set <ValidationMessage > errors = new HashSet <>();
50+
4951 for (JsonSchema schema : schemas ) {
50- Set <ValidationMessage > errors = schema .validate (node , rootNode , at );
51- if (errors == null || errors .isEmpty ()) {
52+ Set <ValidationMessage > schemaErrors = schema .validate (node , rootNode , at );
53+ if (schemaErrors .isEmpty ()) {
5254 numberOfValidSchema ++;
55+ errors = new HashSet <>();
5356 }
57+ if (numberOfValidSchema == 0 ){
58+ errors .addAll (schemaErrors );
59+ }
5460 if (numberOfValidSchema > 1 ) {
5561 break ;
5662 }
5763 }
58-
59- Set <ValidationMessage > errors = new HashSet <ValidationMessage >();
60- if (numberOfValidSchema != 1 ) {
61- errors .add (buildValidationMessage (at , "" ));
64+
65+ if (numberOfValidSchema == 0 ) {
66+ errors = errors .stream ()
67+ .filter (msg -> !ValidatorTypeCode .ADDITIONAL_PROPERTIES
68+ .equals (ValidatorTypeCode .fromValue (msg .getType ())))
69+ .collect (Collectors .toSet ());
70+ }
71+ if (numberOfValidSchema > 1 ) {
72+ errors = new HashSet <>();
73+ errors .add (buildValidationMessage (at , "" ));
6274 }
75+
6376 return errors ;
6477 }
6578
0 commit comments