ektorp couchdb IllegalStateException контент используется - PullRequest
0 голосов
/ 23 марта 2012

Прошло много времени с тех пор, как я работал с Java, особенно с исключениями. Я нахожусь в процессе добавления ektorp couchdb интеграции в то, над чем я работаю. Тем не менее, я сталкиваюсь с потребляемым контентом.

В рассматриваемой программе используется twitter4j, и я получаю свои статусы и записываю их в экземпляр couchdb.

public void putTweet(Status status)
{
    Map<String, Object> newTweetDoc = new HashMap<String, Object>();
    String docname = status.getUser().getName() + " "
            + status.getCreatedAt().toString();
    newTweetDoc.put("_id", docname);
    newTweetDoc.put("User", status.getUser().getName());
    newTweetDoc.put("Contents", status.getText());
    newTweetDoc.put("Created", status.getCreatedAt().toString());
    newTweetDoc.put("RetweetCount", status.getRetweetCount());
    UserMentionEntity[] mentions = status.getUserMentionEntities();
    Map<String, HashMap<String, String>> formattedMentions = formatMentions(mentions);
    newTweetDoc.put("Mentions", formattedMentions);
    db.addToBulkBuffer(newTweetDoc);
}

Сначала я тоже попробовал db.create (newTweetDoc). Нужно ли заново создавать couchdbConnector каждый раз, когда я пытаюсь это сделать?

db - это глобальный CouchDbConnector: public CouchDbConnector db = null;

public CouchTwitter()
{
    //create the db connection etc
}

Это ошибка db.create (doc) или flushBulkBuffer, которая приводит к ошибке. Вот трассировка стека:

Exception in thread "main" java.lang.IllegalStateException: Content has been consumed
at org.apache.http.entity.BasicHttpEntity.getContent(BasicHttpEntity.java:84)
at org.apache.http.conn.BasicManagedEntity.getContent(BasicManagedEntity.java:88)
at org.ektorp.http.StdHttpResponse.releaseConnection(StdHttpResponse.java:82)
at org.ektorp.http.RestTemplate.handleResponse(RestTemplate.java:111)
at org.ektorp.http.RestTemplate.post(RestTemplate.java:66)
at org.ektorp.impl.StdCouchDbConnector.executeBulk(StdCouchDbConnector.java:638)
at org.ektorp.impl.StdCouchDbConnector.executeBulk(StdCouchDbConnector.java:596)
at org.ektorp.impl.StdCouchDbConnector.flushBulkBuffer(StdCouchDbConnector.java:617)

В приведенном выше примере я вижу, что два отдельных класса Entity вызывают .getContent (), я недавно поигрался с моими ссылочными библиотеками. Возможно ли, что он вызывает как старый Apache Http lib, так и текущий? *

1 Ответ

0 голосов
/ 23 марта 2012

CouchDbConnector является поточно-ориентированным, поэтому вам не нужно создавать его заново для каждой операции.

Я никогда не сталкивался с вашей проблемой, ваш сценарий использования довольно прост, и не должно быть никаких проблем при сохранении основного документа.

Убедитесь, что httpclient-4.1.1 или выше находится в пути к классам.

...