I would like to understand why I can’t get my mapper working in my tests, a NullPointerException occurs.
Here is the test in question:
class ResponseCreationMapperTest {
@Test
void assertWarningsAndErrorsAreMapped() {
ResponseCreationMapper mapper = Mappers.getMapper(ResponseCreationMapper.class);
var response = mapper.asCreateClaimResponse(createResponse()); //mapper is null here
assertThat(.............);
}
This mapper is defined in the following class:
@Mapper(config = ResponseMappingConfig.class)
public abstract class ResponseCreationMapper {
public abstract ResponseCreationClaim asCreationResponse(CreationRS in);
}
@Getter
@Setter
public class ResponseCreateClaim extends CustomResponse {
private String name;
}
@Getter
@Setter
public class CustomResponse {
private List<Error> errors;
private List<Warning> warnings;
}
Here, CreationRS is a class that contains fields Name, ErrorType, WarningType. Error and Warning are classes that contains a code string, and a value string.
And it has a configuration that lets you map fields common to several classes, which is defined here:
@MapperConfig(componentModel = MappingConstants.ComponentModel.SPRING,
uses = { ResponseMapper.class })
public interface ResponseMappingConfig {
}
And the ResponseMapper is defined here, it maps all the warnings to a list (and same for errors):
@Mapper
public class ResponseMapper {
public List<Warning> map(WarningsType in) {
List<Warning> out = null;
if (in != null && in.getWarning() != null) {
out = in.getWarning().stream()
.map(w -> {
Warning warning = new Warning();
warning.setCode(w.getCode());
warning.setValue(w.getValue());
return warning;
})
.collect(Collectors.toList());
}
return out;
}
public List<Error> map(ErrorsType in) {
List<Error> out = null;
if (in != null && in.getError() != null) {
out = in.getError().stream()
.map(w -> {
Error error = new Error();
error.setCode(w.getCode());
error.setValue(w.getValue());
return error;
})
.collect(Collectors.toList());
}
return out;
}
}
My initial test is throwing the following error:
java.lang.NullPointerException: Cannot invoke "ResponseMapper.map(ErrorsType)" because "this.responseMapper" is null
I tried playing with the ContextConfiguration annotation, the Mapstruct constructor injection strategy but nothing worked, my responseMapper keep being null.
Am I missing something? I’ve seen many similar cases such as this, but none has turned out to be the case.
Thank you so much, please if you need more information do not hesitate.
EDIT: Important clarification: if I remove the configuration in the ResponseCreateClaimMapper class, the test passes, my mapper is not null. So the problem is really with the configuration
JavaIsNotBoring is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.