diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchConnectionDetails.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchConnectionDetails.java index d679026393f..6c3ae251162 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchConnectionDetails.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchConnectionDetails.java @@ -20,6 +20,8 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.List; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.autoconfigure.service.connection.ConnectionDetails; import org.springframework.boot.ssl.SslBundle; @@ -43,7 +45,7 @@ public interface ElasticsearchConnectionDetails extends ConnectionDetails { * Username for authentication with Elasticsearch. * @return username for authentication with Elasticsearch or {@code null} */ - default String getUsername() { + default @Nullable String getUsername() { return null; } @@ -51,7 +53,7 @@ public interface ElasticsearchConnectionDetails extends ConnectionDetails { * Password for authentication with Elasticsearch. * @return password for authentication with Elasticsearch or {@code null} */ - default String getPassword() { + default @Nullable String getPassword() { return null; } @@ -60,7 +62,7 @@ public interface ElasticsearchConnectionDetails extends ConnectionDetails { * @return prefix added to the path of every request sent to Elasticsearch or * {@code null} */ - default String getPathPrefix() { + default @Nullable String getPathPrefix() { return null; } @@ -68,7 +70,7 @@ public interface ElasticsearchConnectionDetails extends ConnectionDetails { * SSL bundle to use. * @return the SSL bundle to use */ - default SslBundle getSslBundle() { + default @Nullable SslBundle getSslBundle() { return null; } @@ -81,7 +83,8 @@ public interface ElasticsearchConnectionDetails extends ConnectionDetails { * @param username the username or {@code null} * @param password the password or {@code null} */ - record Node(String hostname, int port, Node.Protocol protocol, String username, String password) { + record Node(String hostname, int port, Node.Protocol protocol, @Nullable String username, + @Nullable String password) { public Node(String host, int port, Node.Protocol protocol) { this(host, port, protocol, null, null); @@ -96,7 +99,7 @@ public interface ElasticsearchConnectionDetails extends ConnectionDetails { } } - private String userInfo() { + private @Nullable String userInfo() { if (this.username == null) { return null; } diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchProperties.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchProperties.java index 286516d4b4b..d6d98718686 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchProperties.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchProperties.java @@ -21,6 +21,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.context.properties.ConfigurationProperties; /** @@ -40,12 +42,12 @@ public class ElasticsearchProperties { /** * Username for authentication with Elasticsearch. */ - private String username; + private @Nullable String username; /** * Password for authentication with Elasticsearch. */ - private String password; + private @Nullable String password; /** * Connection timeout used when communicating with Elasticsearch. @@ -65,7 +67,7 @@ public class ElasticsearchProperties { /** * Prefix added to the path of every request sent to Elasticsearch. */ - private String pathPrefix; + private @Nullable String pathPrefix; private final Restclient restclient = new Restclient(); @@ -77,19 +79,19 @@ public class ElasticsearchProperties { this.uris = uris; } - public String getUsername() { + public @Nullable String getUsername() { return this.username; } - public void setUsername(String username) { + public void setUsername(@Nullable String username) { this.username = username; } - public String getPassword() { + public @Nullable String getPassword() { return this.password; } - public void setPassword(String password) { + public void setPassword(@Nullable String password) { this.password = password; } @@ -117,11 +119,11 @@ public class ElasticsearchProperties { this.socketKeepAlive = socketKeepAlive; } - public String getPathPrefix() { + public @Nullable String getPathPrefix() { return this.pathPrefix; } - public void setPathPrefix(String pathPrefix) { + public void setPathPrefix(@Nullable String pathPrefix) { this.pathPrefix = pathPrefix; } @@ -178,13 +180,13 @@ public class ElasticsearchProperties { /** * SSL bundle name. */ - private String bundle; + private @Nullable String bundle; - public String getBundle() { + public @Nullable String getBundle() { return this.bundle; } - public void setBundle(String bundle) { + public void setBundle(@Nullable String bundle) { this.bundle = bundle; } diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientConfigurations.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientConfigurations.java index 48449f057a6..950d93f17a8 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientConfigurations.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/ElasticsearchRestClientConfigurations.java @@ -37,6 +37,7 @@ import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.sniff.Sniffer; import org.elasticsearch.client.sniff.SnifferBuilder; +import org.jspecify.annotations.Nullable; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -209,7 +210,7 @@ class ElasticsearchRestClientConfigurations { return connectionDetails.getNodes().stream().map(Node::toUri); } - private boolean hasUserInfo(URI uri) { + private boolean hasUserInfo(@Nullable URI uri) { return uri != null && StringUtils.hasLength(uri.getUserInfo()); } @@ -238,9 +239,9 @@ class ElasticsearchRestClientConfigurations { private final ElasticsearchProperties properties; - private final SslBundles sslBundles; + private final @Nullable SslBundles sslBundles; - PropertiesElasticsearchConnectionDetails(ElasticsearchProperties properties, SslBundles sslBundles) { + PropertiesElasticsearchConnectionDetails(ElasticsearchProperties properties, @Nullable SslBundles sslBundles) { this.properties = properties; this.sslBundles = sslBundles; } @@ -251,22 +252,22 @@ class ElasticsearchRestClientConfigurations { } @Override - public String getUsername() { + public @Nullable String getUsername() { return this.properties.getUsername(); } @Override - public String getPassword() { + public @Nullable String getPassword() { return this.properties.getPassword(); } @Override - public String getPathPrefix() { + public @Nullable String getPathPrefix() { return this.properties.getPathPrefix(); } @Override - public SslBundle getSslBundle() { + public @Nullable SslBundle getSslBundle() { Ssl ssl = this.properties.getRestclient().getSsl(); if (StringUtils.hasLength(ssl.getBundle())) { Assert.notNull(this.sslBundles, "SSL bundle name has been set but no SSL bundles found in context"); diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/health/package-info.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/health/package-info.java index 2a3fc72583b..d37448fc411 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/health/package-info.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/health/package-info.java @@ -17,4 +17,7 @@ /** * Auto-configuration for Elasticsearch health. */ +@NullMarked package org.springframework.boot.elasticsearch.autoconfigure.health; + +import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/package-info.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/package-info.java index 3ba06a003fd..a10c42b8b96 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/package-info.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/autoconfigure/package-info.java @@ -17,4 +17,7 @@ /** * Auto-configuration for Elasticsearch client. */ +@NullMarked package org.springframework.boot.elasticsearch.autoconfigure; + +import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchDockerComposeConnectionDetailsFactory.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchDockerComposeConnectionDetailsFactory.java index 23ed708567e..649a58234f8 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchDockerComposeConnectionDetailsFactory.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchDockerComposeConnectionDetailsFactory.java @@ -18,6 +18,8 @@ package org.springframework.boot.elasticsearch.docker.compose; import java.util.List; +import org.jspecify.annotations.Nullable; + import org.springframework.boot.docker.compose.core.RunningService; import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory; import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource; @@ -73,7 +75,7 @@ class ElasticsearchDockerComposeConnectionDetailsFactory } @Override - public String getPassword() { + public @Nullable String getPassword() { return this.environment.getPassword(); } diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java index 867c0ac946f..026039c37a7 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.elasticsearch.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; /** @@ -29,14 +31,14 @@ import org.springframework.util.Assert; */ class ElasticsearchEnvironment { - private final String password; + private final @Nullable String password; ElasticsearchEnvironment(Map env) { Assert.state(!env.containsKey("ELASTIC_PASSWORD_FILE"), "ELASTIC_PASSWORD_FILE is not supported"); this.password = env.get("ELASTIC_PASSWORD"); } - String getPassword() { + @Nullable String getPassword() { return this.password; } diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/package-info.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/package-info.java index 544c4ef8efe..0deae9671fb 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/package-info.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/package-info.java @@ -17,4 +17,7 @@ /** * Support for Docker Compose Elasticsearch service connections. */ +@NullMarked package org.springframework.boot.elasticsearch.docker.compose; + +import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/health/package-info.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/health/package-info.java index 0f8ff9cda37..3129bffc07d 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/health/package-info.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/health/package-info.java @@ -17,4 +17,7 @@ /** * Health integration for Elasticsearch. */ +@NullMarked package org.springframework.boot.elasticsearch.health; + +import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/testcontainers/ElasticsearchContainerConnectionDetailsFactory.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/testcontainers/ElasticsearchContainerConnectionDetailsFactory.java index 6bccfc33a93..1439d2973ee 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/testcontainers/ElasticsearchContainerConnectionDetailsFactory.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/testcontainers/ElasticsearchContainerConnectionDetailsFactory.java @@ -26,6 +26,7 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.util.List; +import org.jspecify.annotations.Nullable; import org.testcontainers.elasticsearch.ElasticsearchContainer; import org.springframework.boot.elasticsearch.autoconfigure.ElasticsearchConnectionDetails; @@ -64,7 +65,7 @@ class ElasticsearchContainerConnectionDetailsFactory private static final class ElasticsearchContainerConnectionDetails extends ContainerConnectionDetails implements ElasticsearchConnectionDetails { - private volatile SslBundle sslBundle; + private volatile @Nullable SslBundle sslBundle; private ElasticsearchContainerConnectionDetails(ContainerConnectionSource source) { super(source); @@ -76,7 +77,7 @@ class ElasticsearchContainerConnectionDetailsFactory } @Override - public String getPassword() { + public @Nullable String getPassword() { return getContainer().getEnvMap().get("ELASTIC_PASSWORD"); } @@ -89,7 +90,7 @@ class ElasticsearchContainerConnectionDetailsFactory } @Override - public SslBundle getSslBundle() { + public @Nullable SslBundle getSslBundle() { if (this.sslBundle != null) { return this.sslBundle; } @@ -111,22 +112,7 @@ class ElasticsearchContainerConnectionDetailsFactory } private SslBundle createSslBundleWithTrustStore(KeyStore trustStore) { - return SslBundle.of(new SslStoreBundle() { - @Override - public KeyStore getKeyStore() { - return null; - } - - @Override - public String getKeyStorePassword() { - return null; - } - - @Override - public KeyStore getTrustStore() { - return trustStore; - } - }); + return SslBundle.of(SslStoreBundle.of(null, null, trustStore)); } private KeyStore createTrustStore(byte[] caCertificate) { diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/testcontainers/package-info.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/testcontainers/package-info.java index 3da8345dccf..9321278a703 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/testcontainers/package-info.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/testcontainers/package-info.java @@ -17,4 +17,7 @@ /** * Support for testcontainers Elasticsearch service connections. */ +@NullMarked package org.springframework.boot.elasticsearch.testcontainers; + +import org.jspecify.annotations.NullMarked;