Class RFC9457Reporter<T,​E extends java.lang.Exception,​R>

  • Type Parameters:
    T - The type of the response.
    E - The base exception type to throw if the response is not a RFC9457 message.
    R - The type of the request or request builder (which allows to modify headers)

    public abstract class RFC9457Reporter<T,​E extends java.lang.Exception,​R>
    extends java.lang.Object
    A reporter for RFC 9457 messages. RFC 9457 is a standard for reporting problems in HTTP responses as a JSON object. There are members specified in the RFC but none of those appear to be required, see rfc9457 section 3.7 Given the JSON fields are not mandatory, this reporter simply extracts the body of the response without validation. A RFC 9457 message is detected by the content type "application/problem+json" in the response header.
    See Also:
    RFC 9457
    • Method Detail

      • getStatusCode

        protected abstract int getStatusCode​(T response)
      • getReasonPhrase

        protected abstract java.lang.String getReasonPhrase​(T response)
      • getBody

        protected abstract java.lang.String getBody​(T response)
                                             throws java.io.IOException
        Throws:
        java.io.IOException
      • prepareRequest

        public abstract void prepareRequest​(R request)
        Prepares the request to accept RFC 9457 responses. This involves setting/updating the "Accept" header to include "application/problem+json".
        Parameters:
        request - The request or request builder to prepare
        See Also:
        RFC 9457 section 3.2
      • readBody

        protected static java.lang.String readBody​(java.io.InputStream is)
                                            throws java.io.IOException
        Reads the given stream into a UTF-8 string, consuming at most MAX_BODY_BYTES bytes. Any remaining bytes are left unread, so an oversized (or decompression amplified) body is truncated instead of exhausting memory. The caller remains responsible for closing the stream.
        Parameters:
        is - The stream to read the body from, must not be null.
        Returns:
        The body as UTF-8 string, truncated to MAX_BODY_BYTES bytes, never null.
        Throws:
        java.io.IOException - If reading the stream fails.
      • generateException

        public void generateException​(T response,
                                      BiConsumerChecked<java.lang.Integer,​java.lang.String,​E> baseException)
                               throws E extends java.lang.Exception,
                                      HttpRFC9457Exception
        Generates a HttpRFC9457Exception if the response type is a RFC 9457 message. Otherwise, it throws the base exception
        Parameters:
        response - The response to check for RFC 9457 messages.
        baseException - The base exception to throw if the response is not a RFC 9457 message.
        Throws:
        E extends java.lang.Exception
        HttpRFC9457Exception