diff --git a/spring-ai-spring-boot-testcontainers/src/main/java/org/springframework/ai/testcontainers/service/connection/mongo/MongoDbAtlasLocalContainerConnectionDetailsFactory.java b/spring-ai-spring-boot-testcontainers/src/main/java/org/springframework/ai/testcontainers/service/connection/mongo/MongoDbAtlasLocalContainerConnectionDetailsFactory.java index bf425a33c6a..b2f21ef461d 100644 --- a/spring-ai-spring-boot-testcontainers/src/main/java/org/springframework/ai/testcontainers/service/connection/mongo/MongoDbAtlasLocalContainerConnectionDetailsFactory.java +++ b/spring-ai-spring-boot-testcontainers/src/main/java/org/springframework/ai/testcontainers/service/connection/mongo/MongoDbAtlasLocalContainerConnectionDetailsFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,12 +16,16 @@ package org.springframework.ai.testcontainers.service.connection.mongo; +import java.lang.reflect.Method; + import com.mongodb.ConnectionString; import org.testcontainers.mongodb.MongoDBAtlasLocalContainer; import org.springframework.boot.autoconfigure.mongo.MongoConnectionDetails; +import org.springframework.boot.ssl.SslBundle; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionDetailsFactory; import org.springframework.boot.testcontainers.service.connection.ContainerConnectionSource; +import org.springframework.util.ReflectionUtils; /** * A {@link ContainerConnectionDetailsFactory} implementation that provides @@ -36,6 +40,7 @@ * testcontainers in Spring Boot applications. * * @author EddĂș MelĂ©ndez + * @author Soby Chacko * @since 1.0.0 * @see ContainerConnectionDetailsFactory * @see MongoConnectionDetails @@ -44,6 +49,12 @@ class MongoDbAtlasLocalContainerConnectionDetailsFactory extends ContainerConnectionDetailsFactory { + private static final Method GET_SSL_BUNDLE_METHOD; + + static { + GET_SSL_BUNDLE_METHOD = ReflectionUtils.findMethod(MongoConnectionDetails.class, "getSslBundle"); + } + @Override protected MongoConnectionDetails getContainerConnectionDetails( ContainerConnectionSource source) { @@ -66,6 +77,14 @@ public ConnectionString getConnectionString() { return new ConnectionString(getContainer().getConnectionString()); } + // Conditional implementation based on whether the method exists + public SslBundle getSslBundle() { + if (GET_SSL_BUNDLE_METHOD != null) { // Boot 3.5.x+ + return (SslBundle) ReflectionUtils.invokeMethod(GET_SSL_BUNDLE_METHOD, this); + } + return null; // Boot 3.4.x (No-Op) + } + } }