Skip to content
Snippets Groups Projects
Commit bf1ccf01 authored by Martin Lowe's avatar Martin Lowe :flag_ca:
Browse files

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

parent 972737a5
No related branches found
No related tags found
1 merge request!45Fix NPE when no content-encoding is set for API Middleware
Pipeline #9690 passed
...@@ -37,10 +37,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; ...@@ -37,10 +37,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import io.quarkus.arc.Unremovable; import io.quarkus.arc.Unremovable;
/** /**
* Serves as a middleware for external calls. This generalizes retrieving * Serves as a middleware for external calls. This generalizes retrieving multiple pages of data using the Link header
* 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
* 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. * passing that pagination data on to the current request.
* *
* @author Martin Lowe, Zachary Sabourin * @author Martin Lowe, Zachary Sabourin
...@@ -58,20 +56,20 @@ public class DefaultAPIMiddleware implements APIMiddleware { ...@@ -58,20 +56,20 @@ public class DefaultAPIMiddleware implements APIMiddleware {
CacheRecorderService recorderService; CacheRecorderService recorderService;
@Override @Override
public <T> List<T> paginationPassThrough(Function<BaseAPIParameters, Response> supplier, RequestWrapper request, public <T> List<T> paginationPassThrough(Function<BaseAPIParameters, Response> supplier, RequestWrapper request, Class<T> type) {
Class<T> type) {
// get the response for the current request // get the response for the current request
LOGGER.trace("Making request with: {}", BaseAPIParameters.buildFromWrapper(request)); LOGGER.trace("Making request with: {}", BaseAPIParameters.buildFromWrapper(request));
Response r = supplier.apply(BaseAPIParameters.buildFromWrapper(request)); Response r = supplier.apply(BaseAPIParameters.buildFromWrapper(request));
// apply response headers forward (pass through) // apply response headers forward (pass through)
request.setHeader(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER, request
r.getHeaderString(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER)); .setHeader(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER,
request.setHeader(PaginatedResultsFilter.MAX_PAGE_SIZE_HEADER, r.getHeaderString(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER));
r.getHeaderString(PaginatedResultsFilter.MAX_PAGE_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: {}", LOGGER
r.getHeaderString(PaginatedResultsFilter.MAX_RESULTS_SIZE_HEADER), .trace("Found pagination data max_size={} and page_size={} for request: {}",
r.getHeaderString(PaginatedResultsFilter.MAX_PAGE_SIZE_HEADER), getURISafely(request.getURI())); 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 // record the data to be used for this request
recorderService.recordRequest(request); recorderService.recordRequest(request);
return readInValue(new LinkedList<>(), r, type); return readInValue(new LinkedList<>(), r, type);
...@@ -99,7 +97,8 @@ public class DefaultAPIMiddleware implements APIMiddleware { ...@@ -99,7 +97,8 @@ public class DefaultAPIMiddleware implements APIMiddleware {
private <T> List<T> readInValue(List<T> out, Response r, Class<T> type) { private <T> List<T> readInValue(List<T> out, Response r, Class<T> type) {
Object o = r.getEntity(); Object o = r.getEntity();
try { 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))); out.addAll(objectMapper.readerForListOf(type).readValue(new GZIPInputStream((InputStream) o)));
} else if (o instanceof InputStream) { } else if (o instanceof InputStream) {
out.addAll(objectMapper.readerForListOf(type).readValue((InputStream) o)); out.addAll(objectMapper.readerForListOf(type).readValue((InputStream) o));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment