in src/main/java/com/amazonaws/services/neptune/rdf/NeptuneSparqlClient.java [245:282]
static String getErrorMessageFromTrailers(org.apache.http.HttpResponse response) {
if (response == null) {
return "";
}
InputStream responseInStream;
try {
responseInStream = response.getEntity().getContent();
} catch (IOException e) {
return "";
}
// HTTPClient 4.5.13 provides no methods for accessing trailers from a wrapped stream requiring the use of
// reflection to break encapsulation. This bug is being tracked in https://issues.apache.org/jira/browse/HTTPCLIENT-2263.
while (!(responseInStream instanceof ChunkedInputStream)){
Field wrappedStreamField;
try {
wrappedStreamField = responseInStream.getClass().getDeclaredField("wrappedStream");
wrappedStreamField.setAccessible(true);
responseInStream = (InputStream) wrappedStreamField.get(responseInStream);
wrappedStreamField.setAccessible(false);
} catch (Exception e) {
return "";
}
}
// Consume remaining response, ensures trailers have been consumed and are available
EntityUtils.consumeQuietly(response.getEntity());
Header[] trailers = ((ChunkedInputStream) responseInStream).getFooters();
StringBuilder messageBuilder = new StringBuilder();
for (Header trailer : trailers) {
try {
messageBuilder.append(URLDecoder.decode(trailer.toString(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
messageBuilder.append(trailer);
}
messageBuilder.append('\n');
}
return messageBuilder.toString();
}