2016-04-22 2 views
1

Я анализирующие файлы и извлекает их содержали затем попытаться сохранить их в моей базе данных с морфием, но у меня есть эта ошибка:хранить данные в MongoDB в Java

INFO: LoggerImplFactory set to org.mongodb.morphia.logging.jdk.JDKLoggerFactory 
Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/client/model/geojson/codecs/GeoJsonCodecProvider 

здесь моя главная:

finally { 


        Morphia morphia =new Morphia(); 
        String mongo2 ="test"; 
        CelluDAO cellDAO=new CelluDAO(MongoUtil.getMongo(),morphia,mongo2); 
        System.out.println("Connect to database successfully"); 

        for (Cellu cel : data) { 
         System.out.println(cel.getT()); 
         cellDAO.save(cel); 
        } 


        MongoUtil.getMongo().close(); 
       } 

вот мой класс CelluDAO:

public class CelluDAO extends BasicDAO<Cellu,String> { 

    public CelluDAO (MongoClient mongoClient, Morphia morphia, String dbName) { 
     super(mongoClient, morphia, dbName); 
    } 

public List<Cellu> findAll() { 
    return ds.find(Cellu.class).asList(); 

} 
public List<Cellu> findUnderID(int id){ 
    return ds.find(Cellu.class).filter("Id",id).order("Id").asList(); 
} 

} 

мой класс Mongoutil:

public class MongoUtil { 
     private static final int port = 27017; 
     private static final String host = "localhost"; 
     private static final String databaseName = "test"; 

     private static MongoClient mongo = null; 
     private static MongoDatabase db = null; 

     public static MongoClient getMongo() { 
      if (mongo == null) { 
       mongo = new MongoClient(host, port); 
      } 
      return mongo; 
     } 

     public static MongoDatabase getDB() { 
      if (db == null) { 
       if (mongo == null) { 
        mongo = getMongo(); 
       } 
       db = mongo.getDatabase(databaseName); 
      } 
      return db; 
     } 

     public MongoCollection<Document> getCollection(String collection) { 
      if (db == null) { 
       db = getDB(); 
      } 
      MongoCollection<Document> table = db.getCollection(collection); 
      return table; 
     } 

    } 

Я делаю что-то правильно? есть ли лучший способ сделать это?

+0

Код выглядит ОК (IMHO), ошибка, похоже, связана с отсутствующим классом. Как вы определяете свои зависимости и какие из них вы включаете? –

ответ

0

Документ Java для NoClassDefFoundError на https://docs.oracle.com/javase/7/docs/api/java/lang/NoClassDefFoundError.html представлен ниже.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

Прежде всего, убедитесь, что версия MongoDB и Driver одинакова.

Попробуйте использовать версию драйвера Java от MongoDB версии 3.1 или выше. Я вижу com.mongodb.client.model.geojson.codecs пакет в Java-документах MongoDB - http://api.mongodb.org/java/3.1, где это невозможно в версии 3.0 - http://api.mongodb.org/java/3.0.

Следовательно, драйвер Java может вызывать ошибку в используемой вами версии (то есть, 3.0.4).

0

Убедитесь, что вы используете что-то в строке 3.x драйвера Java. Похоже, вы используете 2.13 или 2.14.

+0

Я использую драйвер java .3.0.4, возможно, я должен подключиться к mongodb, запустив некоторые команды в командной строке! –

+0

Этот класс был добавлен в 3.1 драйвера. – evanchooly

+0

Я добавил новую версию драйвера, и это все еще не работает! –