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)
上記のように、2 つの別個のエンティティ クラスが両方とも .getContent() を呼び出していることがわかります。最近、参照ライブラリをいじっていますが、古い apache Http ライブラリと現在のものを呼び出している可能性はありますか?