@@ -206,26 +206,29 @@ public void testMultipleErrorCollection() throws Exception {
206206 }
207207
208208 /// Test discriminator tag exemption
209- /// RFC 8927 Section 3.3 .8: Discriminator property is exempt from additional properties validation
209+ /// RFC 8927 §2.2 .8: Only the discriminator field itself is exempt from additionalProperties enforcement
210210 @ Test
211211 public void testDiscriminatorTagExemption () throws Exception {
212212 JsonValue schema = Json .parse ("{\" discriminator\" : \" type\" , \" mapping\" : {\" person\" : {\" properties\" : {\" name\" : {\" type\" : \" string\" }}}}}" );
213213
214214 // Valid data with discriminator and no additional properties
215215 JsonValue validData1 = Json .parse ("{\" type\" : \" person\" , \" name\" : \" John\" }" );
216216
217- // Data with discriminator and additional properties (discriminator should be exempt)
218- JsonValue validData2 = Json .parse ("{\" type\" : \" person\" , \" name\" : \" John\" , \" extra\" : \" allowed \" }" );
217+ // Data with discriminator and additional properties (only discriminator field should be exempt)
218+ JsonValue invalidData2 = Json .parse ("{\" type\" : \" person\" , \" name\" : \" John\" , \" extra\" : \" not_allowed \" }" );
219219
220220 Jtd validator = new Jtd ();
221221
222- // Both should be valid - discriminator is exempt from additional properties check
222+ // First should be valid - no additional properties
223223 Jtd .Result result1 = validator .validate (schema , validData1 );
224- Jtd .Result result2 = validator .validate (schema , validData2 );
225-
226224 assertThat (result1 .isValid ()).isTrue ();
227- assertThat (result2 .isValid ()).isTrue ();
228- LOG .fine (() -> "Discriminator tag exemption test - data1: " + validData1 + ", data2: " + validData2 );
225+
226+ // Second should be invalid - extra field is not exempt, only discriminator field is
227+ Jtd .Result result2 = validator .validate (schema , invalidData2 );
228+ assertThat (result2 .isValid ()).isFalse ();
229+ assertThat (result2 .errors ()).anySatisfy (error -> assertThat (error ).contains ("extra" ));
230+
231+ LOG .fine (() -> "Discriminator tag exemption test - valid: " + validData1 + ", invalid: " + invalidData2 );
229232 }
230233
231234 /// Counter-test: Discriminator with invalid mapping
0 commit comments