문제를 발견하게 된 과정
Oracle Open JDK17에서 빌드할 땐 잘 되는데 Gitlab CLI로 DEV에 Build하면 오류가 발생했습니다.
builds/[파일경로]/[파일명].java:11:
error:
Internal error in the mapping processor:
java.lang.NullPointerException:
Cannot invoke "com.sun.tools.javac.code.Symbol.getEnclosingElement()" because "sym" is null
문제 코드
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface Mapper {
@Mapping(source = "code.code", target = "code")
@Mapping(source = "code.name", target = "name")
ItemDto builderItemDto(Item Item, CommonCode code);
}
public record CommonCode(
String code,
String name
) {
}
문제의 원인
Record class의 필드를 Mapper interface 의 @Mapping 어노테이션에서 조회하지 못해서 에러가 났습니다.
로컬에서 사용하고 있는 JDK 버전과 DEV환경에서 사용하고 있는 JDK 버전이 달라서 발생한 문제였습니다.
DEV JDK version: 17.0
로컬 JDK version: 17.5
17.0 버전 이전에서는 record class build 에러가 발생했던 것 같은데, 17.X 버전 이후부터 개선이 된 것 같습니다.
문제를 해결한 방법
방법1. Record class를 사용하지 않는 방법으로 고쳤습니다.
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface Mapper {
@Mapping(source = "code", target = "code")
@Mapping(source = "name", target = "name")
ItemDto builderItemDto(Item Item, String code, String name);
}
방법2. 이후에 DEV JDK version을 17.5로 올리고, record class를 사용하는 코드로 수정했습니다.
반응형
'Coding > trouble shooting' 카테고리의 다른 글
BUG | MsSql Deadlock 교착상태 문제 해결 (0) | 2024.10.28 |
---|---|
BUG | repository flush 할 때 연관관계는 매핑이 안되는 오류 (0) | 2023.06.20 |
BUG | DB 커넥션 부족 문제 해결 비결 (1) | 2023.06.01 |