static String getErrorMessageFromTrailers()

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();
    }