2017-05-28 155 views
-2

如何捕获由以下代码引起的异常?如何在Java中连接到MongoDB时捕获异常?

try { 
    MongoCredential credential = MongoCredential.createCredential(
            cu.getName(), 
            "admin", 
            cu.getPassword().toCharArray()); 

    ServerAddress address = new ServerAddress("localhost", 27017); 

    mongoClient = new MongoClient(address, Arrays.asList(credential)); 

} catch (MongoSecurityException e) { 
    System.out.println("test"); 
} 

我在堆栈跟踪中遇到了异常,但我无法捕获它们。

麦29,2017年上午01时04分37秒com.mongodb.diagnostics.logging.JULLogger登录 信息:与设置{主机= [本地主机:27017]创建集群,模式= SINGLE,requiredClusterType =未知, serverSelectionTimeout ='30000 ms',maxWaitQueueSize = 500} Mai 29,2017 1:04:37 AM com.mongodb.diagnostics.logging.JULLogger日志 信息:连接到服务器localhost时监视线程中的异常:27017 com.mongodb .MongoSecurityException:在com.mongodb.connection.SaslAuthenticator.wrapInMongoSecurityException(SaslAuthenticator.java:157)上验证MongoCredential {机制= null,userName ='root',source ='admin',password =,mechanismProperties = {}}的异常at com.mongodb.connection.SaslAuthenticator.access $ 200(SaslAuthenticator.java:37) at com.mongodb.connection.SaslAuthenticator $ 1.run(SaslAuthenticator.java:66) at com.mongodb.connection.SaslAuthenticator $ 1.run (SaslAuthenticator.java:44) 在com.mongodb.connection.SaslAuthenticator.doAsSubject(SaslAuthenticator.java:162) 在com.mongodb.connection.SaslAuthenticator.authenticate(SaslAuthenticator.java:44) 在com.mongodb.connection .DefaultAuthenticator.authenticate(DefaultAuthenticator.java:32) 在com.mongodb.connection.InternalStreamConnectionInitializer.authenticateAll(InternalStreamConnectionInitializer.java:109) 在com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:46) at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:116) at com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable.run(DefaultServerMonitor.java:113) at java.lang.Thread.run(Unknown Source ) 引起:com.mongodb.MongoCommandException:命令失败,错误18:'验证失败。'在服务器localhost:27017上。完整的响应是{“ok”:0.0,“errmsg”:“身份验证失败。”,“code”:18,“codeName”:“AuthenticationFailed”} at com.mongodb.connection.CommandHelper.createCommandFailureException(CommandHelper.java :170) 在com.mongodb.connection.CommandHelper.receiveCommandResult(CommandHelper.java:123) 在com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32) 在com.mongodb.connection.SaslAuthenticator.sendSaslContinue (SaslAuthenticator.java:121) 在com.mongodb.connection.SaslAuthenticator.access $ 100(SaslAuthenticator.java:37) 在com.mongodb.connection.SaslAuthenticator $ 1.run(SaslAuthenticator.java:63) ... 9更多 `

+2

如果你看看其余的回溯,你可能会发现抛出的代码不在你的try块内。 – bmargulies

回答

0

看来你有一个身份验证问题:

com.mongodb.MongoSecurityException:异常验证MongoCredential {机制= NULL,用户名= '根',源= '管理员',密码=,mechanismProperties = {} } at ...`

看着你的代码,我看到它叫做MongoCredential.createCredential()它接受3个参数(用户,数据库和密码)。

假设您的凭据是正确的,我强烈怀疑admin不是您的数据库名称。

+0

是的,exaclty。这是我想要捕捉的例外。 – Max