MongoDB - Can't serialize class ao persistir

31 views
Skip to first unread message

Gustavo Coelho

unread,
Oct 8, 2012, 10:08:44 PM10/8/12
to nos...@googlegroups.com
Olá pessoal, estou tendo problemas ao realizar a persistência desta classe News.java em uma base MongoDB. Segue abaixo todas as classes referentes ao problema e o stack ao final. Desde já agradeço a colaboração.

Att,

[code]
package br.com.ucsal.monografia.controller;

import java.util.List;

import br.com.ucsal.monografia.model.HashTag;
import br.com.ucsal.monografia.model.News;
import br.com.ucsal.monografia.service.HashTagService;
import br.com.ucsal.monografia.service.NewsService;
import br.com.ucsal.monografia.twitter.TwitterLoader;

public class CargaNews {

private static void save(List<News> newss) {

NewsService newsService = new NewsService();

for (News news : newss) {
newsService.save(news);
}

}

}
[/code]


[code]
package br.com.ucsal.monografia.service;

import java.util.List;
import java.util.Map;

import br.com.caelum.vraptor.ioc.Component;
import br.com.ucsal.monografia.dao.NewsDao;
import br.com.ucsal.monografia.model.News;

@Component
public class NewsService {

private NewsDao dao = new NewsDao();

public void save(News news) {
dao.save(news);
}

}
[/code]


[code]
package br.com.ucsal.monografia.dao;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import br.com.ucsal.monografia.converter.NewsConverter;
import br.com.ucsal.monografia.model.News;

import com.mongodb.DBObject;

public class NewsDao extends EntityDao<News> {

public NewsDao() {
super(News.class);
}

public void save(News news) {
Map<String, Object> mapNews = new NewsConverter().converterToMap(news);
save(mapNews);
}

}

[/code]


[code]
package br.com.ucsal.monografia.converter;

import java.util.HashMap;
import java.util.Map;
import br.com.ucsal.monografia.model.Feed;
import br.com.ucsal.monografia.model.News;
import br.com.ucsal.monografia.model.NewsType;
import br.com.ucsal.monografia.model.TwitterModel;

import com.mongodb.DBObject;

public class NewsConverter {

public Map<String, Object> converterToMap(News news) {
Map<String, Object> mapNews = new HashMap<String, Object>();
mapNews.put("twitterModel", news.getTwitterModel());
mapNews.put("feed", news.getFeed());
mapNews.put("newsType", news.getNewsType());

return mapNews;
}

}
[/code]


[code]
package br.com.ucsal.monografia.model;

import java.io.Serializable;

public class TwitterModel implements Serializable{

private static final long serialVersionUID = 7686683331955611044L;

private String twitt;

public TwitterModel() {
}

public String getTwitt() {
return twitt;
}

public void setTwitt(String twitt) {
this.twitt = twitt;
}

}

[/code]




[code]
package br.com.ucsal.monografia.model;

import java.io.Serializable;

public class News implements Serializable{

private static final long serialVersionUID = 7686683331955611044L;

private String id;
private TwitterModel twitterModel;
private Feed feed;
private NewsType newsType;

public News(TwitterModel twitterModel, Feed feed, NewsType newsType) {
this.twitterModel = twitterModel;
this.feed = feed;
this.newsType = newsType;
}

public News() {
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public TwitterModel getTwitterModel() {
return twitterModel;
}

public TwitterModel getTwitter() {
return twitterModel;
}

public void setTwitterModel(TwitterModel twitterModel) {
this.twitterModel = twitterModel;
}

public Feed getFeed() {
return feed;
}

public void setFeed(Feed feed) {
this.feed = feed;
}

public NewsType getNewsType() {
return newsType;
}

public void setNewsType(NewsType newsType) {
this.newsType = newsType;
}

}
[/code]




[code]
Exception in thread "main" java.lang.IllegalArgumentException: can't serialize class br.com.ucsal.monografia.model.TwitterModel
at org.bson.BSONEncoder._putObjectField(BSONEncoder.java:188)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:119)
at org.bson.BSONEncoder.putObject(BSONEncoder.java:65)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:131)
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:97)
at com.mongodb.DBCollection.insert(DBCollection.java:75)
at com.mongodb.DBCollection.save(DBCollection.java:545)
at com.mongodb.DBCollection.save(DBCollection.java:523)
at br.com.ucsal.monografia.dao.EntityDao.save(EntityDao.java:39)
at br.com.ucsal.monografia.dao.NewsDao.save(NewsDao.java:20)
at br.com.ucsal.monografia.service.NewsService.save(NewsService.java:16)
at br.com.ucsal.monografia.controller.CargaNews.save(CargaNews.java:32)
at br.com.ucsal.monografia.controller.CargaNews.main(CargaNews.java:23)
[/code]

Fernando Akira Tajima

unread,
Oct 9, 2012, 8:17:35 AM10/9/12
to nos...@googlegroups.com

Gustavo bom dia, o erro fala que não consegue converter o objeto twitterModel pois o mesmo não é primitivo  altera o converter e coloca assim:

mapNews.put("twitterModel.twitt", news.getTwitterModel().getTwitt());

Por curiosidade poderia postar sua classe EntityDao? 

Existe um framework de persistência para o mongoDb eu utilizo ele e não é nescessário ficar fazendo esses converter para cada classe. Spring Data

Akira-san

unread,
Oct 9, 2012, 7:31:12 AM10/9/12
to nos...@googlegroups.com

Gustavo bom dia, o erro fala que não consegue converter o objeto twitterModel pois o mesmo não é primitivo  altera o converter e coloca assim:

mapNews.put("twitterModel.twitt", news.getTwitterModel().getTwitt());

Reply all
Reply to author
Forward
0 new messages