Skip to content
Snippets Groups Projects

Fix NPE when no content-encoding is set for API Middleware

Merged Martin Lowe requested to merge malowe/master/gzip-fix into master
1 file
+ 13
14
Compare changes
  • Side-by-side
  • Inline
@@ -37,10 +37,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import io.quarkus.arc.Unremovable;
/**
* Serves as a middleware for external calls. This generalizes retrieving
* multiple pages of data using the Link header
* rather than manually iterating over the data or using less robust checks
* (such as no data in response), or for
* Serves as a middleware for external calls. This generalizes retrieving multiple pages of data using the Link header
* rather than manually iterating over the data or using less robust checks (such as no data in response), or for
* passing that pagination data on to the current request.
*
* @author Martin Lowe, Zachary Sabourin
@@ -58,20 +56,20 @@ public class DefaultAPIMiddleware implements APIMiddleware {
CacheRecorderService recorderService;
@Override
public <T> List<T> paginationPassThrough(Function<BaseAPIParameters, Response> supplier, RequestWrapper request,
Class<T> type) {
public <T> List<T> paginationPassThrough(Function<BaseAPIParameters, Response> supplier, RequestWrapper request, Class<T> type) {
// get the response for the current request
LOGGER.trace("Making request with: {}", BaseAPIParameters.buildFromWrapper(request));
Response r = supplier.apply(BaseAPIParameters.buildFromWrapper(request));
// apply response headers forward (pass through)
request.setHeader(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER,
r.getHeaderString(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER));
request.setHeader(PaginatedResultsFilter.MAX_PAGE_SIZE_HEADER,
r.getHeaderString(PaginatedResultsFilter.MAX_PAGE_SIZE_HEADER));
request
.setHeader(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER,
r.getHeaderString(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER));
request.setHeader(PaginatedResultsFilter.MAX_PAGE_SIZE_HEADER, r.getHeaderString(PaginatedResultsFilter.MAX_PAGE_SIZE_HEADER));
LOGGER.trace("Found pagination data max_size={} and page_size={} for request: {}",
r.getHeaderString(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER),
r.getHeaderString(PaginatedResultsFilter.MAX_PAGE_SIZE_HEADER), getURISafely(request.getURI()));
LOGGER
.trace("Found pagination data max_size={} and page_size={} for request: {}",
r.getHeaderString(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER),
r.getHeaderString(PaginatedResultsFilter.MAX_PAGE_SIZE_HEADER), getURISafely(request.getURI()));
// record the data to be used for this request
recorderService.recordRequest(request);
return readInValue(new LinkedList<>(), r, type);
@@ -99,7 +97,8 @@ public class DefaultAPIMiddleware implements APIMiddleware {
private <T> List<T> readInValue(List<T> out, Response r, Class<T> type) {
Object o = r.getEntity();
try {
if (o instanceof InputStream && r.getHeaderString("Content-Encoding").equalsIgnoreCase("GZIP")) {
if (o instanceof InputStream
&& (r.getHeaderString("Content-Encoding") != null && r.getHeaderString("Content-Encoding").equalsIgnoreCase("GZIP"))) {
out.addAll(objectMapper.readerForListOf(type).readValue(new GZIPInputStream((InputStream) o)));
} else if (o instanceof InputStream) {
out.addAll(objectMapper.readerForListOf(type).readValue((InputStream) o));
Loading