2828import org .springframework .core .Ordered ;
2929import org .springframework .data .mapping .Person ;
3030import org .springframework .data .mapping .PersonDocument ;
31+ import org .springframework .data .mapping .PersonNoId ;
3132import org .springframework .data .mapping .callback .CapturingEntityCallback .FirstCallback ;
3233import org .springframework .data .mapping .callback .CapturingEntityCallback .SecondCallback ;
3334import org .springframework .data .mapping .callback .CapturingEntityCallback .ThirdCallback ;
@@ -95,9 +96,8 @@ void invokeInvalidEvent() {
9596 DefaultEntityCallbacks callbacks = new DefaultEntityCallbacks ();
9697 callbacks .addEntityCallback (new InvalidEntityCallback () {});
9798
98- assertThatIllegalStateException ()
99- .isThrownBy (() -> callbacks .callback (InvalidEntityCallback .class , new PersonDocument (null , "Walter" , null ),
100- "agr0" , Float .POSITIVE_INFINITY ));
99+ assertThatIllegalStateException ().isThrownBy (() -> callbacks .callback (InvalidEntityCallback .class ,
100+ new PersonDocument (null , "Walter" , null ), "agr0" , Float .POSITIVE_INFINITY ));
101101 }
102102
103103 @ Test // DATACMNS-1467
@@ -126,8 +126,7 @@ void errorsOnNullEntity() {
126126 DefaultEntityCallbacks callbacks = new DefaultEntityCallbacks ();
127127 callbacks .addEntityCallback (new CapturingEntityCallback ());
128128
129- assertThatIllegalArgumentException ()
130- .isThrownBy (() -> callbacks .callback (CapturingEntityCallback .class , null ));
129+ assertThatIllegalArgumentException ().isThrownBy (() -> callbacks .callback (CapturingEntityCallback .class , null ));
131130 }
132131
133132 @ Test // DATACMNS-1467
@@ -144,18 +143,31 @@ void errorsOnNullValueReturnedByCallbackEntity() {
144143
145144 PersonDocument initial = new PersonDocument (null , "Walter" , null );
146145
147- assertThatIllegalArgumentException ()
148- .isThrownBy (() -> callbacks .callback (CapturingEntityCallback .class , initial ));
146+ assertThatIllegalArgumentException ().isThrownBy (() -> callbacks .callback (CapturingEntityCallback .class , initial ));
149147
150148 assertThat (first .capturedValue ()).isSameAs (initial );
151149 assertThat (second .capturedValue ()).isNotNull ().isNotSameAs (initial );
152150 assertThat (third .capturedValues ()).isEmpty ();
153151 }
154152
153+ @ Test // GH-2583
154+ void skipsInvocationUsingJava18ReflectiveTypeRejection () {
155+
156+ DefaultEntityCallbacks callbacks = new DefaultEntityCallbacks ();
157+ callbacks .addEntityCallback (new Java18ClassCastStyle ());
158+
159+ Person person = new PersonNoId (42 , "Walter" , "White" );
160+
161+ Person afterCallback = callbacks .callback (BeforeConvertCallback .class , person );
162+
163+ assertThat (afterCallback ).isSameAs (person );
164+ }
165+
155166 @ Test // DATACMNS-1467
156167 void detectsMultipleCallbacksWithinOneClass () {
157168
158- AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (MultipleCallbacksInOneClassConfig .class );
169+ AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext (
170+ MultipleCallbacksInOneClassConfig .class );
159171
160172 DefaultEntityCallbacks callbacks = new DefaultEntityCallbacks (ctx );
161173
@@ -288,4 +300,13 @@ public Person onBeforeSave(Person object) {
288300 }
289301 }
290302
303+ static class Java18ClassCastStyle implements BeforeConvertCallback <Person > {
304+
305+ @ Override
306+ public Person onBeforeConvert (Person object ) {
307+ throw new IllegalArgumentException ("argument type mismatch" );
308+ }
309+
310+ }
311+
291312}
0 commit comments