es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

NullPointerException en collection.insert() MongoDB en Java

Bueno, soy principiante en MongoDB, así que intenté cambiar getDB() por getDatabase() y obtuve null en esta línea => this.col.insert(doc);

¿Alguien podría ayudarme con esto?

“`java
public class MongoDBPersonDAOnew {

<pre><code>private DBCollection col;
private MongoClient mongoClient;

public MongoDBPersonDAOnew(MongoClient mongo) {

MongoCollection<document> col = mongo.getDatabase("journaldev").getCollection("Persons");

System.out.println(col + "teste01");
//com.mongodb.client.internal.MongoCollectionImpl@47bccada teste01

}

public Person createPerson(Person p) {

System.out.println(p.getName() + "teste02");
DBObject doc = PersonConverter.toDBObject(p);
System.out.println(doc + "teste03");
//this.col.insert(doc);
this.col.insert(doc);
System.out.println(col);
ObjectId id = (ObjectId) doc.get("_id");
p.setId(id.toString());
System.out.println(p + "teste04");
//com.mongodb.client.internal.MongoCollectionImpl@5be01b45 teste01

return p;
}
</code></pre>

}

INFO: Server startup in 4443 ms
com.mongodb.client.internal.MongoCollectionImpl@29f80582 teste01
yy teste02
{"name": "yy", "country": "uu"} teste03
dez 11, 2021 10:24:29 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [servlets.AddPersonServletnew] in context with path [/MongoDBWebapp] threw exception
java.lang.NullPointerException
at dao.MongoDBPersonDAOnew.createPerson(MongoDBPersonDAOnew.java:45)
at servlets.AddPersonServletnew.doPost(AddPersonServletnew.java:40)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar relacionado con el uso del método getDB(), que ha sido reemplazado por getDatabase() en la versión actual de MongoDB.

    En el código proporcionado, el constructor de MongoDBPersonDAOnew inicializa un objeto MongoClient y llama al método getDatabase() para obtener una referencia a la colección Persons dentro de la base de datos journaldev. Sin embargo, la referencia al objeto MongoClient no se almacena en la variable de instancia mongoClient, y la referencia al objeto MongoCollection no se almacena en la variable de instancia col.

    En el método createPerson(), se convierte un objeto Person a un objeto DBObject usando la clase PersonConverter, y se llama al método insert() en col para insertar el DBObject. Sin embargo, col es nulo porque no se inicializó en el constructor.

    Para solucionar este problema, debes almacenar la referencia al objeto MongoClient en la variable de instancia mongoClient, y la referencia al objeto MongoCollection en la variable de instancia col. Puedes modificar el constructor de la siguiente manera:

    public MongoDBPersonDAOnew(MongoClient mongo) {
        this.mongoClient = mongo;
        this.col = mongo.getDatabase("journaldev").getCollection("Persons");
        System.out.println(col + " teste01");
    }
    

    Luego, en el método createPerson(), debes usar la referencia almacenada en col:

    public Person createPerson(Person p) {
        System.out.println(p.getName() + " teste02");
        DBObject doc = PersonConverter.toDBObject(p);
        System.out.println(doc +" teste03");
        col.insertOne(doc);
        System.out.println(col);
        ObjectId id = (ObjectId) doc.get("_id");
        p.setId(id.toString());
        System.out.println(p +" teste04");
    
        return p;
    }
    

    Esto debería solucionar el NullPointerException, ya que col ahora se inicializará correctamente y se accederá en el método createPerson().

Comments are closed.