After being inspired by Piotr Przybyl‘s talk about integration testing, I started off a new project with some thorough testing of a Spring Boot JAR.
Software development is full of obscure problems, and when uploading an object to an emulated Amazon S3 service using LocalStack, I kept getting the error:
java.lang.NullPointerException: host must not be null.
Not the most helpful error message, especially since I was setting endpointOverride on my S3Client builder in this way:
this.s3Client = S3Client.builder().endpointOverride(localstack.getEndpoint()).credentialsProvider(StaticCredentialsProvider.create(credentials)).build();
Some hours of painful searching suggested that the error message was pointing me in the wrong direction.
The solution? Add this to the Builder:
.forcePathStyle(Boolean.TRUE)