Closed
Description
Hello.
MongoClientVersion does its best to determine mongodb driver version properly and use a proper driver API.
But looks like com.mongodb.internal.build.MongoDriverVersion.VERSION value is inlined and always 5.2.1 (for spring-data-mongodb 4.4.4), note LDC "5.2.1":
Bytecode
private static getVersionFromPackage(Ljava/lang/ClassLoader;)Lorg/springframework/data/util/Version;
// parameter classLoader
@Lorg/springframework/lang/Nullable;()
TRYCATCHBLOCK L0 L1 L2 java/lang/IllegalArgumentException
L3
LINENUMBER 97 L3
LDC "com.mongodb.internal.build.MongoDriverVersion"
ALOAD 0
INVOKESTATIC org/springframework/util/ClassUtils.isPresent (Ljava/lang/String;Ljava/lang/ClassLoader;)Z
IFEQ L4
L0
LINENUMBER 99 L0
LDC "5.2.1"
INVOKESTATIC org/springframework/data/util/Version.parse (Ljava/lang/String;)Lorg/springframework/data/util/Version;
L1
ARETURN
L2
LINENUMBER 100 L2
FRAME SAME1 java/lang/IllegalArgumentException
ASTORE 1
L4
LINENUMBER 104 L4
FRAME SAME
ACONST_NULL
ARETURN
L5
LOCALVARIABLE classLoader Ljava/lang/ClassLoader; L3 L5 0
MAXSTACK = 2
MAXLOCALS = 2
Stacktrace
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.springframework.data.mongodb.core.MongoTemplate.lambda$getCollectionNames$29(MongoTemplate.java:2353)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:582)
at org.springframework.data.mongodb.core.MongoTemplate.getCollectionNames(MongoTemplate.java:2351)
at smagellan.test.mongodb.SpringDataMongodbRunner.main(SpringDataMongodbRunner.java:15)
Caused by: java.lang.IllegalStateException: Unable to load com.mongodb.client.ListCollectionNamesIterable
at org.springframework.data.mongodb.util.MongoCompatibilityAdapter$MongoDatabaseAdapter.<clinit>(MongoCompatibilityAdapter.java:228)
... 4 more
Caused by: java.lang.ClassNotFoundException: com.mongodb.client.ListCollectionNamesIterable
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:534)
at java.base/java.lang.Class.forName(Class.java:513)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:299)
at org.springframework.data.mongodb.util.MongoCompatibilityAdapter$MongoDatabaseAdapter.<clinit>(MongoCompatibilityAdapter.java:225)
... 4 more