From d4b3e2b99dc21208ab6a4062be487df0ce3e8400 Mon Sep 17 00:00:00 2001 From: Mark Pollack Date: Mon, 14 Nov 2011 22:48:07 -0500 Subject: [PATCH] DATAMONGO-306 - NullPointerException if mongo factory created via URI with out credentials --- .../mongodb/core/SimpleMongoDbFactory.java | 13 ++++++++--- .../MongoDbFactoryParserIntegrationTests.java | 23 +++++++++++++++++++ .../namespace/mongo-uri-no-credentials.xml | 10 ++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 spring-data-mongodb/src/test/resources/namespace/mongo-uri-no-credentials.xml diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SimpleMongoDbFactory.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SimpleMongoDbFactory.java index 4fc4856c1..bb474ac70 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SimpleMongoDbFactory.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/SimpleMongoDbFactory.java @@ -82,9 +82,8 @@ public class SimpleMongoDbFactory implements DisposableBean, MongoDbFactory { * @throws UnknownHostException * @see MongoURI */ - public SimpleMongoDbFactory(MongoURI uri) throws MongoException, UnknownHostException { - - this(new Mongo(uri), uri.getDatabase(), new UserCredentials(uri.getUsername(), String.valueOf(uri.getPassword()))); + public SimpleMongoDbFactory(MongoURI uri) throws MongoException, UnknownHostException { + this(new Mongo(uri), uri.getDatabase(), new UserCredentials(uri.getUsername(), parseChars(uri.getPassword()))); } /** @@ -127,4 +126,12 @@ public class SimpleMongoDbFactory implements DisposableBean, MongoDbFactory { public void destroy() throws Exception { mongo.close(); } + + public static String parseChars(char[] chars) { + if (chars == null) { + return null; + } else { + return String.valueOf(chars); + } + } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryParserIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryParserIntegrationTests.java index 52848a247..a5f9d1686 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryParserIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryParserIntegrationTests.java @@ -28,7 +28,9 @@ import org.springframework.beans.factory.config.ConstructorArgumentValues.ValueH import org.springframework.beans.factory.parsing.BeanDefinitionParsingException; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; +import org.springframework.data.mongodb.MongoDbFactory; +import com.mongodb.DB; import com.mongodb.Mongo; import com.mongodb.MongoURI; @@ -80,6 +82,27 @@ public class MongoDbFactoryParserIntegrationTests { assertThat(argument, is(notNullValue())); } + /** + * @see DATADOC-306 + */ + @Test + public void setsUpMongoDbFactoryUsingAMongoUriWithoutCredentials() { + + XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("namespace/mongo-uri-no-credentials.xml")); + BeanDefinition definition = factory.getBeanDefinition("mongoDbFactory"); + ConstructorArgumentValues constructorArguments = definition.getConstructorArgumentValues(); + + assertThat(constructorArguments.getArgumentCount(), is(1)); + ValueHolder argument = constructorArguments.getArgumentValue(0, MongoURI.class); + assertThat(argument, is(notNullValue())); + + MongoDbFactory dbFactory = factory.getBean("mongoDbFactory", MongoDbFactory.class); + DB db = dbFactory.getDb(); + assertThat("database", is(db.getName())); + + + } + /** * @see DATADOC-295 */ diff --git a/spring-data-mongodb/src/test/resources/namespace/mongo-uri-no-credentials.xml b/spring-data-mongodb/src/test/resources/namespace/mongo-uri-no-credentials.xml new file mode 100644 index 000000000..411da8287 --- /dev/null +++ b/spring-data-mongodb/src/test/resources/namespace/mongo-uri-no-credentials.xml @@ -0,0 +1,10 @@ + + + + + +