본문 바로가기
🪲 bugs

Error: Cannot invoke because "this.repository" is null

by iirin 2023. 9. 2.

발생 상황

  • PostgreSQL 에 hibernate로 처음 연동 후, 테스트용 API를 보내본 상황
java.lang.NullPointerException: Cannot invoke "project.labelingtool.backend.api.resource.adapter.out.persist.BankRepository.findAll()" because "this.repository" is null
    at project.labelingtool.backend.api.resource.adapter.out.persist.ResourceRepositoryImpl.findAllBanks(ResourceRepositoryImpl.java:24) ~[main/:na]
    at project.labelingtool.backend.api.resource.application.service.ResourceService.getBanks(ResourceService.java:19) ~[main/:na]
    at project.labelingtool.backend.api.resource.adapter.in.rest.ResourceController.responseAllBanks(ResourceController.java:23) ~[main/: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]
    // 이하 생략

발생 원인

  • 아마도 repository 초기화가 잘 안된 것 같아서 어노테이션을 확인했으나 별 문제 없었다.
  • 그래도 의존성 문제일 가능성이 높아보인다. 디버깅모드로 해결을 시도하였다.

대처

  • 알고보니 custom repository impl을 만들 때 final 키워드를 누락한 것 같다. 다음은 수정된 코드
@Service
@RequiredArgsConstructor
public class FindAllBanksImpl implements FindAllBanksPort {

    private final BankRepository repository;

    @Override
    public List<Bank> findAllBanks() {...}
}

Refs.

  • none