I got NoClassDefFoundError
when using Atlas mongodb from Android. Here is the code.
MongoClientURI uri = new MongoClientURI(
"mongodb://admin:[email protected]:27017,clusterxxxx.mongodb.net:27017,clusterxxxx.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin&retryWrites=true");
MongoClient mongoClient = new MongoClient(uri);
final MongoDatabase database = mongoClient.getDatabase("test");
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
MongoCollection < Document > collection = database.getCollection("col");
Document myDoc = collection.find().first();
Log.i("xxx", myDoc.toJson());
}
});
thread.start();
I'm using the following driver.
implementation 'org.mongodb:mongodb-driver:3.10.0'
Here is the error message.
2019-02-07 15:16:54.787 16655-16686/com.vac.wasd.myapplication E/AndroidRuntime: FATAL EXCEPTION: Thread-4
Process: com.vac.wasd.myapplication, PID: 16655
com.mongodb.MongoException: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/security/sasl/SaslClient;
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:136)
at com.mongodb.internal.connection.UsageTrackingInternalConnection.open(UsageTrackingInternalConnection.java:50)
at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.open(DefaultConnectionPool.java:390)
at com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:106)
at com.mongodb.internal.connection.DefaultConnectionPool.get(DefaultConnectionPool.java:92)
at com.mongodb.internal.connection.DefaultServer.getConnection(DefaultServer.java:85)
at com.mongodb.binding.ClusterBinding$ClusterBindingConnectionSource.getConnection(ClusterBinding.java:115)
at com.mongodb.client.internal.ClientSessionBinding$SessionBindingConnectionSource.getConnection(ClientSessionBinding.java:111)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:460)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:406)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:696)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:83)
at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:179)
at com.mongodb.client.internal.FindIterableImpl.first(FindIterableImpl.java:199)
at com.vac.wasd.myapplication.MainActivity$1.run(MainActivity.java:41)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/security/sasl/SaslClient;
at com.mongodb.internal.connection.DefaultAuthenticator.getLegacyDefaultAuthenticator(DefaultAuthenticator.java:99)