Skip to content

NPE in PropertyValueConverterFactory.getConverter #2597

@loonis

Description

@loonis
  • Using spring-data-commons-2.7.0-M4 (via Spring boot 2.7.0-M3)
  • In a multithreaded context where I read and insert thousand of document in Mongodb

Arround 1% of my reads fails due to the error below. If I retry the read few seconds later it passes.

I tried with spring-boot:2.7.0-M2 (spring-data-commons-2.7.0-M3) and there is no error.
I also tried with spring-data-commons-2.7.0-M4 (via Spring boot 2.7.0-M3) in a single sequential thread, there is no error too.

Caused by: java.lang.NullPointerException: Cannot invoke "org.springframework.data.convert.PropertyValueConverterFactory.getConverter(org.springframework.data.mapping.PersistentProperty)" because "this.converterFactory" is null
                at org.springframework.data.convert.SimplePropertyValueConversions.hasValueConverter(SimplePropertyValueConversions.java:99) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.data.convert.CustomConversions.hasPropertyValueConverter(CustomConversions.java:198) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedValue(QueryMapper.java:437) ~[spring-data-mongodb-3.4.0-M4.jar:3.4.0-M4]
                at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObjectForField(QueryMapper.java:340) ~[spring-data-mongodb-3.4.0-M4.jar:3.4.0-M4]
                at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:167) ~[spring-data-mongodb-3.4.0-M4.jar:3.4.0-M4]
                at org.springframework.data.mongodb.core.QueryOperations$QueryContext.getMappedQuery(QueryOperations.java:288) ~[spring-data-mongodb-3.4.0-M4.jar:3.4.0-M4]
                at org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:2608) ~[spring-data-mongodb-3.4.0-M4.jar:3.4.0-M4]
                at org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:2585) ~[spring-data-mongodb-3.4.0-M4.jar:3.4.0-M4]
                at org.springframework.data.mongodb.core.MongoTemplate.findById(MongoTemplate.java:922) ~[spring-data-mongodb-3.4.0-M4.jar:3.4.0-M4]
                at org.springframework.data.mongodb.repository.support.SimpleMongoRepository.findById(SimpleMongoRepository.java:132) ~[spring-data-mongodb-3.4.0-M4.jar:3.4.0-M4]
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
                at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
                at org.springframework.data.repository.core.support.RepositoryMethodInvoker$RepositoryFragmentMethodInvoker.lambda$new$0(RepositoryMethodInvoker.java:289) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:529) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:285) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:639) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.17.jar:5.3.17]
                at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:163) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:138) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.17.jar:5.3.17]
                at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.7.0-M4.jar:2.7.0-M4]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.17.jar:5.3.17]
                at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.17.jar:5.3.17]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.17.jar:5.3.17]
                at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.17.jar:5.3.17]
                at jdk.proxy2/jdk.proxy2.$Proxy98.findById(Unknown Source) ~[na:na]
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
                at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
                at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344) ~[spring-aop-5.3.17.jar:5.3.17]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.3.17.jar:5.3.17]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.17.jar:5.3.17]
                at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137) ~[spring-tx-5.3.17.jar:5.3.17]
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.17.jar:5.3.17]
                at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215) ~[spring-aop-5.3.17.jar:5.3.17]
                at jdk.proxy2/jdk.proxy2.$Proxy98.findById(Unknown Source) ~[na:na]
				...
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
                at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
                at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:169) ~[spring-messaging-5.3.17.jar:5.3.17]
                at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:119) ~[spring-messaging-5.3.17.jar:5.3.17]
                at org.springframework.kafka.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:56) ~[spring-kafka-2.8.4.jar:2.8.4]
                at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:347) ~[spring-kafka-2.8.4.jar:2.8.4]
                ... 17 common frames omitted

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions