This is an automated email from the ASF dual-hosted git repository.

anovikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite-extensions.git


The following commit(s) were added to refs/heads/master by this push:
     new 7b6ad63a IGNITE-27531 Possible NPE in IgniteRepositoryQuery#convert. 
(#332)
7b6ad63a is described below

commit 7b6ad63a3a9020112734b315579d771ee6704c0a
Author: Andrey Novikov <[email protected]>
AuthorDate: Tue Jan 13 19:44:48 2026 +0700

    IGNITE-27531 Possible NPE in IgniteRepositoryQuery#convert. (#332)
---
 .../repository/query/IgniteRepositoryQuery.java        |  3 ++-
 .../springdata/IgniteSpringDataConversionsTest.java    | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git 
a/modules/spring-data-ext/spring-data/src/main/java/org/apache/ignite/springdata/repository/query/IgniteRepositoryQuery.java
 
b/modules/spring-data-ext/spring-data/src/main/java/org/apache/ignite/springdata/repository/query/IgniteRepositoryQuery.java
index d1243126..ff2aaf6e 100644
--- 
a/modules/spring-data-ext/spring-data/src/main/java/org/apache/ignite/springdata/repository/query/IgniteRepositoryQuery.java
+++ 
b/modules/spring-data-ext/spring-data/src/main/java/org/apache/ignite/springdata/repository/query/IgniteRepositoryQuery.java
@@ -57,6 +57,7 @@ import 
org.apache.ignite.springdata.repository.query.StringQuery.ParameterBindin
 import 
org.apache.ignite.springdata.repository.query.StringQuery.ParameterBindingParser;
 import org.jetbrains.annotations.Nullable;
 import org.springframework.core.convert.ConversionService;
+import org.springframework.core.convert.TypeDescriptor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.Pageable;
@@ -902,7 +903,7 @@ public class IgniteRepositoryQuery implements 
RepositoryQuery {
      * @return Converted object.
      */
     private <T> T convert(Object source, Class<?> targetType) {
-        if (conversionService.canConvert(source.getClass(), targetType))
+        if (conversionService.canConvert(TypeDescriptor.forObject(source), 
TypeDescriptor.valueOf(targetType)))
             return (T)conversionService.convert(source, targetType);
 
         return (T)source;
diff --git 
a/modules/spring-data-ext/spring-data/src/test/java/org/apache/ignite/springdata/IgniteSpringDataConversionsTest.java
 
b/modules/spring-data-ext/spring-data/src/test/java/org/apache/ignite/springdata/IgniteSpringDataConversionsTest.java
index 045e704d..b4097759 100644
--- 
a/modules/spring-data-ext/spring-data/src/test/java/org/apache/ignite/springdata/IgniteSpringDataConversionsTest.java
+++ 
b/modules/spring-data-ext/spring-data/src/test/java/org/apache/ignite/springdata/IgniteSpringDataConversionsTest.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.springdata;
 
 import java.time.LocalDateTime;
+import java.util.List;
 import org.apache.ignite.springdata.misc.ApplicationConfiguration;
 import 
org.apache.ignite.springdata.misc.CustomConvertersApplicationConfiguration;
 import org.apache.ignite.springdata.misc.Person;
@@ -61,6 +62,23 @@ public class IgniteSpringDataConversionsTest extends 
GridCommonAbstractTest {
         assertNull(savePerson(person).getCreatedAt());
     }
 
+    /**  */
+    @Test
+    public void testConvertionForNullable() {
+        init(ApplicationConfiguration.class);
+
+        Person person = new Person("some_name", null, LocalDateTime.now());
+        int id = 1;
+
+        assertEquals(person, repo.save(id, person));
+        assertTrue(repo.existsById(id));
+
+        List<Person> rows = repo.queryWithRowToEntityConversion();
+
+        assertEquals(1, rows.size());
+        assertEquals(person, rows.get(0));
+    }
+
     /**
      * @param componentClasses Component classes.
      */

Reply via email to