package com.gettingmobile.google.reader.rest; import com.gettingmobile.io.CharacterSet; import com.gettingmobile.io.IOUtils; import com.gettingmobile.rest.ContentIOException; import com.gettingmobile.rest.entity.AbstractEntityExtractor; import com.google.gson.stream.JsonReader; import org.apache.http.HttpEntity; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.Reader; public abstract class JsonStreamExtractor<V, T extends JsonStream<V>> extends AbstractEntityExtractor<T> { protected abstract T createIterator(JsonReader parser); @Override public T extract(HttpEntity entity) throws ContentIOException { Reader reader = null; T stream = null; try { reader = new BufferedReader(new InputStreamReader(getContent(entity), CharacterSet.UTF8)); final JsonReader jsonReader = new JsonReader(reader); stream = createIterator(jsonReader); stream.startReading(); return stream; } catch (ContentIOException ex) { IOUtils.closeQuietly(stream != null ? stream : reader); throw ex; } catch (Throwable ex) { IOUtils.closeQuietly(stream != null ? stream : reader); throw new ContentIOException(ex); } } }