2016-11-23 113 views
1

我想運行下面的命令來創建一個用戶用MongoDB的Java驅動程序,org.bson.codecs.configuration.CodecConfigurationException:找不到類[Ljava.lang.String;

client = new MongoClient(mongoClientURI); 
    MongoDatabase database = client.getDatabase("db_1"); 

    Document createUserCommand = new Document(); 
    createUserCommand.put("createUser", "abc"); 
    createUserCommand.put("pwd", "abc"); 
    createUserCommand.put("roles", new String[]{"userAdmin", "read", "readWrite", "dbAdmin", "dbOwner"});   database.runCommand(createUserCommand); 

但以下異常:

Exception in thread "main" org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class [Ljava.lang.String;. 
    at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46) 
    at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63) 
    at org.bson.codecs.configuration.ChildCodecRegistry.get(ChildCodecRegistry.java:51) 
    at org.bson.codecs.DocumentCodec.writeValue(DocumentCodec.java:174) 
    at org.bson.codecs.DocumentCodec.writeMap(DocumentCodec.java:189) 
    at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:131) 
    at org.bson.codecs.DocumentCodec.encode(DocumentCodec.java:45) 
    at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63) 

看起來角色字段,它是一個數組導致這個問題,有人可以看看這個問題嗎?由於

+1

看起來像我想通了這個問題, createUserCommand.put( 「角色」 ,new String [] {「userAdmin」,「read」,「readWrite」,「dbAdmin」,「dbOwner」}); database.runCommand(createUserCommand); 應該是 列表 roles = new ArrayList (); roles.add( 「userAdmin); ... createUserCommand.put(」 角色」,角色); database.runCommand(createUserCommand); 看起來它支持列表,而不是數組,這實在是太醜了 – Tom

+0

。發佈它作爲答案,它也幫助我。 – Jimmy

回答

0
createUserCommand.put("roles", new String[]{"userAdmin", "read", "readWrite", "dbAdmin", "dbOwner"}); 
database.runCommand(createUserCommand); 

應該

List<String> roles = new ArrayList<String>(); 
roles.add("userAdmin); ... createUserCommand.put("roles", roles); database.runCommand(createUserCommand); 

看起來它支持列表,而不是數組,這實在是UGL