diff --git a/src/main/java/io/xlate/edi/internal/stream/validation/Validator.java b/src/main/java/io/xlate/edi/internal/stream/validation/Validator.java index 2814798a..c7bd6842 100644 --- a/src/main/java/io/xlate/edi/internal/stream/validation/Validator.java +++ b/src/main/java/io/xlate/edi/internal/stream/validation/Validator.java @@ -638,6 +638,7 @@ boolean checkPeerSegments(CharSequence tag, UsageNode current, int startDepth, V handler.segmentError(next.getId(), next.getLink(), SEGMENT_NOT_IN_PROPER_SEQUENCE); next.incrementUsage(); + next.resetChildren(); if (next.exceedsMaximumUsage(SEGMENT_VERSION)) { handler.segmentError(next.getId(), next.getLink(), SEGMENT_EXCEEDS_MAXIMUM_USE); @@ -928,6 +929,7 @@ public boolean validCompositeOccurrences(Dialect dialect, Location position) { this.composite = this.element; this.element = null; this.composite.incrementUsage(); + // resetChildren? if (this.composite.exceedsMaximumUsage(version)) { elementErrors.add(new UsageError(this.composite, TOO_MANY_REPETITIONS)); @@ -943,6 +945,7 @@ public boolean validCompositeOccurrences(Dialect dialect, Location position) { if (implSegmentSelected) { this.implComposite.incrementUsage(); + // resetChildren? } return elementErrors.isEmpty(); diff --git a/src/test/java/io/xlate/edi/internal/stream/SegmentValidationTest.java b/src/test/java/io/xlate/edi/internal/stream/SegmentValidationTest.java index 192a2873..fd3b9401 100644 --- a/src/test/java/io/xlate/edi/internal/stream/SegmentValidationTest.java +++ b/src/test/java/io/xlate/edi/internal/stream/SegmentValidationTest.java @@ -46,6 +46,7 @@ public boolean accept(EDIStreamReader reader) { switch (reader.getEventType()) { case START_TRANSACTION: case SEGMENT_ERROR: + case ELEMENT_OCCURRENCE_ERROR: return true; default: return false;