Стековая трассировка указывает на строку Stream.toList() в методе findAll() ниже. EventorRepostory — это стандартный JpaRepository, а toDomainModel — это сборщик ломбоков для класса записи с точно такими же свойствами (не) допускающими значение NULL.
Что меня так понял, так это то, что jpaRepository.findall() может создавать только безопасный список NPE. Метод toDomainModel — это сборщик ломбоков, который также должен быть нулевым, если только он не получает нулевой объект. Первое защищает второе, так как же toList() может вызвать здесь NPE?
Код: Выделить всё
public List findAll() {
return eventorRepository
.findAll()
.parallelStream()
.map(Eventor::toDomainModel)
.toList();
}
@Entity
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Eventor {
@NotNull
private Integer id;
@Id
private UUID uuid;
private Instant creationDate;
private Location location; //class with @NotNull properties
@Embedded
private EventorState eventorState;
}
Код: Выделить всё
@Test
public void test() {
when(jpaRepository.findAll()).thenReturn(List.of(getEventor()));
service.findAll().forEach(System.out::println);
}
Код: Выделить всё
Unexpected exception occurred invoking async method: public void nu.eg.nu.business.services.EventorService.processEventor(java.util.Collection,java.time.Instant)
java.lang.NullPointerException: null
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(Unknown Source)
at java.base/java.util.concurrent.ForkJoinTask.reportException(Unknown Source)
at java.base/java.util.concurrent.ForkJoinTask.invoke(Unknown Source)
at java.base/java.util.stream.Nodes.collect(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.evaluateToNode(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.toArray(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.toArray(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.toList(Unknown Source)
at nu.eg.numsi.persistence.EventorSqlRepository.findAll(EventorSqlRepository.java:26)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:138)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720)
at nu.eg.nu.persistence.EventorSqlRepository$$SpringCGLIB$$0.findAll()
at nu.eg.nu.business.services.EventorService.getAllEventor(EventorService.java:22)
at nu.eg.nu.business.services.EventorService.getEventorAsMap(EventorService.java:26)
at nu.eg.nu.business.services.EventorService.getEventorAsMap(EventorService.java:59)
at nu.eg.nu.business.services.EventorService.processEventor(EventorService.java:34)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:355)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:379)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768)
at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:113)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: null
Подробнее здесь: https://stackoverflow.com/questions/793 ... ist-method
Мобильная версия