This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch jbFixRestNpe
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/jbFixRestNpe by this push:
     new 46d3a4ce7 Make RestRequest/RestResponse extend 
HttpServletRequest/Response
46d3a4ce7 is described below

commit 46d3a4ce72d4538845030d734fcdb4dc7b156f21
Author: JamesBognar <[email protected]>
AuthorDate: Fri Aug 12 11:30:02 2022 -0400

    Make RestRequest/RestResponse extend HttpServletRequest/Response
---
 .../java/org/apache/juneau/rest/RestRequest.java   |  97 ++-----------
 .../java/org/apache/juneau/rest/RestResponse.java  | 154 ++-------------------
 .../juneau/rest/httppart/RequestContent.java       |   4 +-
 .../rest/processor/PlainTextPojoProcessor.java     |   2 +-
 .../rest/processor/SerializedPojoProcessor.java    |   2 +-
 .../apache/juneau/rest/vars/RequestHeaderVar.java  |   2 +-
 .../juneau/http/SerializedHttpEntity_Test.java     |   2 +-
 .../org/apache/juneau/http/remote/Remote_Test.java |   2 +-
 .../org/apache/juneau/rest/RestOp_Params_Test.java |   2 +-
 .../Rest_DefaultRequestAttributes_Test.java        |   8 +-
 .../rest/client/RestClient_BasicCalls_Test.java    |   2 +-
 .../client/RestClient_Config_BeanContext_Test.java |   4 +-
 .../client/RestClient_Config_OpenApi_Test.java     |   2 +-
 .../client/RestClient_Config_RestClient_Test.java  |   2 +-
 .../rest/client/RestClient_Headers_Test.java       |   2 +-
 .../client/RestClient_Response_Headers_Test.java   |   2 +-
 .../rest/client/RestClient_Response_Test.java      |   4 +-
 17 files changed, 50 insertions(+), 243 deletions(-)

diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
index df902fd1c..c5d52fb35 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestRequest.java
@@ -32,6 +32,7 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.net.*;
 import java.nio.charset.*;
+import java.security.*;
 import java.text.*;
 import java.util.*;
 import java.util.logging.*;
@@ -199,7 +200,7 @@ import org.apache.juneau.utils.*;
  * </ul>
  */
 @SuppressWarnings({ "unchecked", "unused" })
-public final class RestRequest {
+public final class RestRequest extends HttpServletRequestWrapper {
 
        // Constructor initialized.
        private HttpServletRequest inner;
@@ -227,6 +228,7 @@ public final class RestRequest {
         * Constructor.
         */
        RestRequest(RestOpContext opContext, RestSession session) throws 
Exception {
+               super(session.getRequest());
                this.session = session;
                this.opContext = opContext;
 
@@ -355,7 +357,7 @@ public final class RestRequest {
         * @return A new fluent assertion on the parameter, never <jk>null</jk>.
         */
        public FluentRequestHeaderAssertion<RestRequest> assertHeader(String 
name) {
-               return new FluentRequestHeaderAssertion<>(getHeader(name), 
this);
+               return new FluentRequestHeaderAssertion<>(getHeaderParam(name), 
this);
        }
 
        /**
@@ -464,7 +466,7 @@ public final class RestRequest {
         * @param name The header name.
         * @return The request header object, never <jk>null</jk>.
         */
-       public RequestHeader getHeader(String name) {
+       public RequestHeader getHeaderParam(String name) {
                return headers.getLast(name);
        }
 
@@ -514,7 +516,7 @@ public final class RestRequest {
                        // Determine charset
                        // NOTE:  Don't use super.getCharacterEncoding() 
because the spec is implemented inconsistently.
                        // Jetty returns the default charset instead of null if 
the character is not specified on the request.
-                       String h = getHeader("Content-Type").orElse(null);
+                       String h = getHeaderParam("Content-Type").orElse(null);
                        if (h != null) {
                                int i = h.indexOf(";charset=");
                                if (i > 0)
@@ -536,6 +538,7 @@ public final class RestRequest {
         *
         * @return The preferred Locale that the client will accept content in. 
 Never <jk>null</jk>.
         */
+       @Override
        public Locale getLocale() {
                Locale best = inner.getLocale();
                String h = 
headers.get("Accept-Language").asString().orElse(null);
@@ -679,6 +682,7 @@ public final class RestRequest {
         * @param name The attribute name.
         * @return The attribute value, never <jk>null</jk>.
         */
+       @Override
        public RequestAttribute getAttribute(String name) {
                return attrs.get(name);
        }
@@ -689,6 +693,7 @@ public final class RestRequest {
         * @param name The attribute name.
         * @param value The attribute value.
         */
+       @Override
        public void setAttribute(String name, Object value) {
                attrs.set(name, value);
        }
@@ -999,6 +1004,7 @@ public final class RestRequest {
         * @return The HTTP content content as a {@link Reader}.
         * @throws IOException If content could not be read.
         */
+       @Override
        public BufferedReader getReader() throws IOException {
                return getContent().getReader();
        }
@@ -1015,6 +1021,7 @@ public final class RestRequest {
         * @return The negotiated input stream.
         * @throws IOException If any error occurred while trying to get the 
input stream or wrap it in the GZIP wrapper.
         */
+       @Override
        public ServletInputStream getInputStream() throws IOException {
                return getContent().getInputStream();
        }
@@ -1034,6 +1041,7 @@ public final class RestRequest {
         * @return The context path, never <jk>null</jk>.
         * @see HttpServletRequest#getContextPath()
         */
+       @Override
        public String getContextPath() {
                String cp = context.getUriContext();
                return cp == null ? inner.getContextPath() : cp;
@@ -1068,6 +1076,7 @@ public final class RestRequest {
         * @return The servlet path, never <jk>null</jk>.
         * @see HttpServletRequest#getServletPath()
         */
+       @Override
        public String getServletPath() {
                String cp = context.getUriContext();
                String sp = inner.getServletPath();
@@ -1142,58 +1151,6 @@ public final class RestRequest {
                }
        }
 
-       /**
-        * Returns any extra path information associated with the URL the 
client sent when it made this request.
-        *
-        * <p>
-        * The extra path information follows the servlet path but precedes the 
query string and will start with a <js>"/"</js> character.
-        * This method returns <jk>null</jk> if there was no extra path 
information.
-        *
-        * @return The extra path information.
-        * @see HttpServletRequest#getPathInfo()
-        */
-       public String getPathInfo() {
-               return inner.getPathInfo();
-       }
-
-       /**
-        * Returns the part of this request's URL from the protocol name up to 
the query string in the first line of the HTTP request.
-        *
-        * The web container does not decode this String
-        *
-        * @return The request URI.
-        * @see HttpServletRequest#getRequestURI()
-        */
-       public String getRequestURI() {
-               return inner.getRequestURI();
-       }
-
-
-       /**
-        * Returns the query string that is contained in the request URL after 
the path.
-        *
-        * <p>
-        * This method returns <jk>null</jk> if the URL does not have a query 
string.
-        *
-        * @return The query string.
-        * @see HttpServletRequest#getQueryString()
-        */
-       public String getQueryString() {
-               return inner.getQueryString();
-       }
-
-       /**
-        * Reconstructs the URL the client used to make the request.
-        *
-        * <p>
-        * The returned URL contains a protocol, server name, port number, and 
server path, but it does not include query string parameters.
-        *
-        * @return The request URL.
-        * @see HttpServletRequest#getRequestURL()
-        */
-       public StringBuffer getRequestURL() {
-               return inner.getRequestURL();
-       }
        
//-----------------------------------------------------------------------------------------------------------------
        // Labels
        
//-----------------------------------------------------------------------------------------------------------------
@@ -1267,6 +1224,7 @@ public final class RestRequest {
         *
         * @return The HTTP method of this request.
         */
+       @Override
        public String getMethod() {
                return session.getMethod();
        }
@@ -1613,7 +1571,7 @@ public final class RestRequest {
                                                        if (pt == FORMDATA)
                                                                return 
getFormParam(name).parser(pp).schema(schema).as(type).orElse(null);
                                                        if (pt == HEADER)
-                                                               return 
getHeader(name).parser(pp).schema(schema).as(type).orElse(null);
+                                                               return 
getHeaderParam(name).parser(pp).schema(schema).as(type).orElse(null);
                                                        if (pt == PATH)
                                                                return 
getPathParam(name).parser(pp).schema(schema).as(type).orElse(null);
                                                }
@@ -1637,31 +1595,6 @@ public final class RestRequest {
                }
        }
 
-       /**
-        * Returns the current session associated with this request, or if the 
request does not have a session, creates one.
-        *
-        * @return The current request session.
-        * @see HttpServletRequest#getSession()
-        */
-       public HttpSession getSession() {
-               return inner.getSession();
-       }
-
-       /**
-        * Returns a boolean indicating whether the authenticated user is 
included in the specified logical "role".
-        *
-        * <p>
-        * Roles and role membership can be defined using deployment 
descriptors.
-        * If the user has not been authenticated, the method returns false.
-        *
-        * @param role The role name.
-        * @return <jk>true</jk> if the user holds the specified role.
-        * @see HttpServletRequest#isUserInRole(String)
-        */
-       public boolean isUserInRole(String role) {
-               return inner.isUserInRole(role);
-       }
-
        /**
         * Returns the wrapped servlet request.
         *
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
index 68b316921..609e0330d 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestResponse.java
@@ -106,7 +106,7 @@ import org.apache.juneau.serializer.*;
  *     <li class='extlink'>{@source}
  * </ul>
  */
-public final class RestResponse {
+public final class RestResponse extends HttpServletResponseWrapper {
 
        private HttpServletResponse inner;
        private final RestRequest request;
@@ -127,6 +127,7 @@ public final class RestResponse {
         * Constructor.
         */
        RestResponse(RestOpContext opContext, RestSession session, RestRequest 
req) throws Exception {
+               super(session.getResponse());
 
                inner = session.getResponse();
                request = req;
@@ -137,7 +138,7 @@ public final class RestResponse {
                RestContext context = session.getContext();
 
                try {
-                       String passThroughHeaders = 
request.getHeader("x-response-headers").orElse(null);
+                       String passThroughHeaders = 
request.getHeaderParam("x-response-headers").orElse(null);
                        if (passThroughHeaders != null) {
                                JsonMap m = 
context.getPartParser().getPartSession().parse(HEADER, null, 
passThroughHeaders, BeanContext.DEFAULT.getClassMeta(JsonMap.class));
                                for (Map.Entry<String,Object> e : m.entrySet())
@@ -148,7 +149,7 @@ public final class RestResponse {
                }
 
                // Find acceptable charset
-               String h = request.getHeader("accept-charset").orElse(null);
+               String h = 
request.getHeaderParam("accept-charset").orElse(null);
                Charset charset = null;
                if (h == null)
                        charset = opContext.getDefaultCharset();
@@ -168,7 +169,7 @@ public final class RestResponse {
                
opContext.getDefaultResponseHeaders().forEach(x->addHeader(x.getName(), 
resolveUris(x.getValue())));
 
                if (charset == null)
-                       throw new NotAcceptable("No supported charsets in 
header ''Accept-Charset'': ''{0}''", 
request.getHeader("Accept-Charset").orElse(null));
+                       throw new NotAcceptable("No supported charsets in 
header ''Accept-Charset'': ''{0}''", 
request.getHeaderParam("Accept-Charset").orElse(null));
                inner.setCharacterEncoding(charset.name());
 
        }
@@ -293,25 +294,6 @@ public final class RestResponse {
                return this;
        }
 
-       /**
-        * Sets the content type of the response being sent to the client, if 
the response has not been committed yet.
-        *
-        * <p>
-        * The given content type may include a character encoding 
specification, for example, text/html;charset=UTF-8.
-        * The response's character encoding is only set from the given content 
type if this method is called before getWriter is called.
-        *
-        * <p>This method may be called repeatedly to change content type and 
character encoding.
-        * This method has no effect if called after the response has been 
committed.
-        * It does not set the response's character encoding if it is called 
after getWriter has been called or after the response has been committed.
-        *
-        * @param value A string specifying the MIME type of the content.
-        * @return This object.
-        */
-       public RestResponse setContentType(String value) {
-               inner.setContentType(value);
-               return this;
-       }
-
        /**
         * Equivalent to {@link HttpServletResponse#getOutputStream()}, except 
wraps the output stream if an {@link Encoder}
         * was found that matched the <c>Accept-Encoding</c> header.
@@ -325,7 +307,7 @@ public final class RestResponse {
                        Encoder encoder = null;
                        EncoderSet encoders = 
request.getOpContext().getEncoders();
 
-                       String ae = 
request.getHeader("Accept-Encoding").orElse(null);
+                       String ae = 
request.getHeaderParam("Accept-Encoding").orElse(null);
                        if (! (ae == null || ae.isEmpty())) {
                                EncoderMatch match = 
encoders.getEncoderMatch(ae);
                                if (match == null) {
@@ -365,6 +347,7 @@ public final class RestResponse {
         * @return The stream.
         * @throws IOException If stream could not be accessed.
         */
+       @Override
        public ServletOutputStream getOutputStream() throws IOException {
                if (sos == null)
                        sos = inner.getOutputStream();
@@ -390,6 +373,7 @@ public final class RestResponse {
         * @return The writer.
         * @throws IOException If writer could not be accessed.
         */
+       @Override
        public PrintWriter getWriter() throws IOException {
                return getWriter(true, false);
        }
@@ -448,43 +432,6 @@ public final class RestResponse {
                }
        }
 
-       /**
-        * Sets the character encoding (MIME charset) of the response being 
sent to the client, for example, to UTF-8.
-        *
-        * <p>
-        * If the character encoding has already been set by 
<c>setContentType</c> or <c>setLocale</c>, this method overrides it.
-        * Calling {@link #setContentType(String)} with the String of 
<js>"text/html"</js> and calling this method with
-        * <js>"UTF-8"</js> is equivalent with calling {@link 
#setContentType(String)} with <js>"text/html; charset=UTF-8"</js>.
-        *
-        * <p>
-        * This method can be called repeatedly to change the character 
encoding.
-        * This method has no effect if it is called after <c>getWriter</c> has 
been called or after the response has been committed.
-        *
-        * @param value The character encoding value.
-        * @return This object.
-        */
-       public RestResponse setCharacterEncoding(String value) {
-               inner.setCharacterEncoding(value);
-               return this;
-       }
-
-       /**
-        * Returns the name of the character encoding (MIME charset) used for 
the content sent in this response.
-        *
-        * <p>
-        * The character encoding may have been specified explicitly using the 
<c>setCharacterEncoding</c> or <c>setContentType</c> methods,
-        * or implicitly using the <c>setLocale</c> method.
-        * Explicit specifications take precedence over implicit specifications.
-        * Calls made to these methods after <c>getWriter</c> has been called 
or after the response has been committed have
-        * no effect on the character encoding.
-        * If no character encoding has been specified, <js>"ISO-8859-1"</js> 
is returned.
-        *
-        * @return A string specifying the name of the character encoding, for 
example, <js>"UTF-8"</js>.
-        */
-       public String getCharacterEncoding() {
-               return inner.getCharacterEncoding();
-       }
-
        /**
         * Returns the <c>Content-Type</c> header stripped of the charset 
attribute if present.
         *
@@ -494,24 +441,6 @@ public final class RestResponse {
                return MediaType.of(getContentType());
        }
 
-       /**
-        * Returns the content type used for the MIME content sent in this 
response.
-        *
-        *
-        * <p>
-        * The content type proper must have been specified using 
<c>setContentType</c> before the response is committed.
-        * If no content type has been specified, this method returns 
<jk>null</jk>.
-        * If a content type has been specified, and a character encoding has 
been explicitly or implicitly specified as
-        * described in <c>getCharacterEncoding</c> or <c>getWriter</c> has 
been called, the charset parameter is included
-        * in the string returned.
-        * If no character encoding has been specified, the charset parameter 
is omitted.
-        *
-        * @return A string specifying the content type, for example, 
<js>"text/html; charset=UTF-8"</js>, or <jk>null</jk>.
-        */
-       public String getContentType() {
-               return inner.getContentType();
-       }
-
        /**
         * Wrapper around {@link #getCharacterEncoding()} that converts the 
value to a {@link Charset}.
         *
@@ -532,6 +461,7 @@ public final class RestResponse {
         * @param uri The redirection URL.
         * @throws IOException If an input or output exception occurs
         */
+       @Override
        public void sendRedirect(String uri) throws IOException {
                char c = (uri.length() > 0 ? uri.charAt(0) : 0);
                if (c != '/' && uri.indexOf("://") == -1)
@@ -551,6 +481,7 @@ public final class RestResponse {
         * @param name The header name.
         * @param value The header value.
         */
+       @Override
        public void setHeader(String name, String value) {
 
                // Jetty doesn't set the content type correctly if set through 
this method.
@@ -568,16 +499,6 @@ public final class RestResponse {
                }
        }
 
-       /**
-        * Returns a boolean indicating whether the named response header has 
already been set.
-        *
-        * @param name The header name.
-        * @return <jk>true</jk> if the response header has been set.
-        */
-       public boolean containsHeader(String name) {
-               return inner.containsHeader(name);
-       }
-
        /**
         * Sets a header on the request.
         *
@@ -757,6 +678,7 @@ public final class RestResponse {
         *
         * @throws IOException If an I/O error occurred.
         */
+       @Override
        public void flushBuffer() throws IOException {
                if (w != null)
                        w.flush();
@@ -769,39 +691,6 @@ public final class RestResponse {
                return content == null ? null : content.orElse(null);
        }
 
-       /**
-        * Returns the current status code of this response.
-        *
-        * @return The current status code of this response.
-        */
-       public int getStatus() {
-               return inner.getStatus();
-       }
-
-       /**
-        * Sets the status code for this response.
-        *
-        * <p>
-        * This method is used to set the return status code when there is no 
error (for example, for the SC_OK or SC_MOVED_TEMPORARILY status codes).
-        *
-        * <p>
-        * If this method is used to set an error code, then the container's 
error page mechanism will not be triggered.
-        * If there is an error and the caller wishes to invoke an error page 
defined in the web application, then sendError must be used instead.
-        *
-        * <p>
-        * This method preserves any cookies and other response headers.
-        *
-        * <p>
-        * Valid status codes are those in the 2XX, 3XX, 4XX, and 5XX ranges. 
Other status codes are treated as container specific.
-        *
-        * @param value The status code for this response.
-        * @return This object.
-        */
-       public RestResponse setStatus(int value) {
-               inner.setStatus(value);
-               return this;
-       }
-
        /**
         * Enabled safe-header mode.
         *
@@ -845,9 +734,9 @@ public final class RestResponse {
         *
         * @param name The header name.
         * @param value The header value.
-        * @return This object.
         */
-       public RestResponse addHeader(String name, String value) {
+       @Override
+       public void addHeader(String name, String value) {
                if (name != null && value != null) {
                        if (name.equalsIgnoreCase("Content-Type"))
                                setHeader(name, value);
@@ -858,7 +747,6 @@ public final class RestResponse {
                                inner.addHeader(name, value);
                        }
                }
-               return this;
        }
 
        /**
@@ -933,20 +821,6 @@ public final class RestResponse {
                return request.getUriResolver().resolve(s);
        }
 
-       /**
-        * Gets the value of the response header with the given name.
-        *
-        * <p>
-        * If a response header with the given name exists and contains 
multiple values, the value that was added first will be returned.
-        *
-        * @param name The header name.
-        * @return The header value, or <jk>null</jk> if it wasn't set.
-        */
-       public String getHeader(String name) {
-               return inner.getHeader(name);
-       }
-
-
        /**
         * Returns the matching serializer and media type for this response.
         *
@@ -958,7 +832,7 @@ public final class RestResponse {
                if (serializer != null) {
                        serializerMatch = optional(new 
SerializerMatch(getMediaType(), serializer));
                } else {
-                       serializerMatch = 
optional(opContext.getSerializers().getSerializerMatch(request.getHeader("Accept").orElse("*/*")));
+                       serializerMatch = 
optional(opContext.getSerializers().getSerializerMatch(request.getHeaderParam("Accept").orElse("*/*")));
                }
                return serializerMatch;
        }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
index 8005d4179..518a7ee7c 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestContent.java
@@ -546,14 +546,14 @@ public class RequestContent {
 
        private Encoder getEncoder() throws UnsupportedMediaType {
                if (encoder == null) {
-                       String ce = 
req.getHeader("content-encoding").orElse(null);
+                       String ce = 
req.getHeaderParam("content-encoding").orElse(null);
                        if (isNotEmpty(ce)) {
                                ce = ce.trim();
                                encoder = encoders.getEncoder(ce);
                                if (encoder == null)
                                        throw new UnsupportedMediaType(
                                                "Unsupported encoding in 
request header ''Content-Encoding'': ''{0}''\n\tSupported codings: {1}",
-                                               
req.getHeader("content-encoding").orElse(null), 
SimpleJson.of(encoders.getSupportedEncodings())
+                                               
req.getHeaderParam("content-encoding").orElse(null), 
SimpleJson.of(encoders.getSupportedEncodings())
                                        );
                        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/PlainTextPojoProcessor.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/PlainTextPojoProcessor.java
index 294e20877..c73835832 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/PlainTextPojoProcessor.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/PlainTextPojoProcessor.java
@@ -35,7 +35,7 @@ public final class PlainTextPojoProcessor implements 
ResponseProcessor {
        public int process(RestOpSession opSession) throws IOException, 
NotAcceptable, BasicHttpException {
                RestRequest req = opSession.getRequest();
                RestResponse res = opSession.getResponse();
-               String accept = req.getHeader("Accept").orElse("*/*");
+               String accept = req.getHeaderParam("Accept").orElse("*/*");
 
                if (res.getSerializerMatch().isPresent() || ! (isEmpty(accept) 
|| accept.startsWith("text/plain") || accept.contains("*/*")))
                        return NEXT;
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/SerializedPojoProcessor.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/SerializedPojoProcessor.java
index 71964ac2b..1b6ef84fb 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/SerializedPojoProcessor.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/processor/SerializedPojoProcessor.java
@@ -108,7 +108,7 @@ public final class SerializedPojoProcessor implements 
ResponseProcessor {
 
                throw new NotAcceptable(
                        "Unsupported media-type in request header ''Accept'': 
''{0}''\n\tSupported media-types: {1}",
-                       req.getHeader("Accept").orElse(""), 
SimpleJson.of(res.getOpContext().getSerializers().getSupportedMediaTypes())
+                       req.getHeaderParam("Accept").orElse(""), 
SimpleJson.of(res.getOpContext().getSerializers().getSupportedMediaTypes())
                );
        }
 }
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestHeaderVar.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestHeaderVar.java
index a8f5f3015..000a1b640 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestHeaderVar.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/RequestHeaderVar.java
@@ -68,7 +68,7 @@ public class RequestHeaderVar extends MultipartResolvingVar {
 
        @Override /* Var */
        public String resolve(VarResolverSession session, String key) {
-               return 
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new).getHeader(key).orElse(null);
+               return 
session.getBean(RestRequest.class).orElseThrow(InternalServerError::new).getHeaderParam(key).orElse(null);
        }
 
        @Override /* Var */
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
index 6a422970e..ff3e61c4f 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
@@ -41,7 +41,7 @@ public class SerializedHttpEntity_Test {
        public static class A extends BasicRestObject {
                @RestPost
                public String[] checkHeader(org.apache.juneau.rest.RestRequest 
req) {
-                       return 
req.getHeaders().getAll(req.getHeader("Check").orElse(null)).stream().map(x -> 
x.getValue()).toArray(String[]::new);
+                       return 
req.getHeaders().getAll(req.getHeaderParam("Check").orElse(null)).stream().map(x
 -> x.getValue()).toArray(String[]::new);
                }
                @RestPost
                public Reader checkBody(org.apache.juneau.rest.RestRequest req) 
throws IOException {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
index 0ba753891..c05218f1d 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/http/remote/Remote_Test.java
@@ -558,7 +558,7 @@ public class Remote_Test {
        public static class F extends BasicRestObject {
                @RestGet
                public String[] headers(org.apache.juneau.rest.RestRequest req) 
{
-                       return 
req.getHeaders().getAll(req.getHeader("Check").orElse(null)).stream().map(x -> 
x.getValue()).toArray(String[]::new);
+                       return 
req.getHeaders().getAll(req.getHeaderParam("Check").orElse(null)).stream().map(x
 -> x.getValue()).toArray(String[]::new);
                }
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java
index 0fbc727ec..f4523e906 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/rest/RestOp_Params_Test.java
@@ -352,7 +352,7 @@ public class RestOp_Params_Test {
 
                @Override
                public Object resolve(RestOpSession opSession) throws Exception 
{
-                       return new 
B2b(opSession.getRequest().getHeader("Custom").orElse(null));
+                       return new 
B2b(opSession.getRequest().getHeaderParam("Custom").orElse(null));
                }
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_DefaultRequestAttributes_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_DefaultRequestAttributes_Test.java
index 40475d564..a5a2e36b2 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_DefaultRequestAttributes_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Rest_DefaultRequestAttributes_Test.java
@@ -54,7 +54,7 @@ public class Rest_DefaultRequestAttributes_Test {
                        attrs.set("p2", "xp2");
                        attrs.set("p4", "xp4");
                        attrs.set("p5", "xp5"); // New property
-                       String overrideContentType = 
req.getHeader("Override-Content-Type").orElse(null);
+                       String overrideContentType = 
req.getHeaderParam("Override-Content-Type").orElse(null);
                        if (overrideContentType != null)
                                req.getHeaders().set("Content-Type", 
overrideContentType);
                }
@@ -119,10 +119,10 @@ public class Rest_DefaultRequestAttributes_Test {
                        attrs.set("p2", "xp2");
                        attrs.set("p4", "xp4");
                        attrs.set("p5", "xp5"); // New property
-                       String overrideAccept = 
req.getHeader("Override-Accept").orElse(null);
+                       String overrideAccept = 
req.getHeaderParam("Override-Accept").orElse(null);
                        if (overrideAccept != null)
                                req.getHeaders().set("Accept", overrideAccept);
-                       String overrideContentType = 
req.getHeader("Override-Content-Type").orElse(null);
+                       String overrideContentType = 
req.getHeaderParam("Override-Content-Type").orElse(null);
                        if (overrideContentType != null)
                                attrs.set("Override-Content-Type", 
overrideContentType);
                }
@@ -142,7 +142,7 @@ public class Rest_DefaultRequestAttributes_Test {
                public String b(RestRequest req, RequestAttributes attrs) 
throws Exception {
                        attrs.set("p3", "pp3");
                        attrs.set("p4", "pp4");
-                       String accept = req.getHeader("Accept").orElse(null);
+                       String accept = 
req.getHeaderParam("Accept").orElse(null);
                        if (accept == null || accept.isEmpty())
                                req.getHeaders().set("Accept", "text/s2");
                        return null;
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_BasicCalls_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_BasicCalls_Test.java
index 7499f0ab5..cda8b5de3 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_BasicCalls_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_BasicCalls_Test.java
@@ -89,7 +89,7 @@ public class RestClient_BasicCalls_Test {
                }
                @RestOp(path="/checkHeader")
                public String[] postHeader(org.apache.juneau.rest.RestRequest 
req) {
-                       return 
req.getHeaders().getAll(req.getHeader("Check").orElse(null)).stream().map(x -> 
x.getValue()).toArray(String[]::new);
+                       return 
req.getHeaders().getAll(req.getHeaderParam("Check").orElse(null)).stream().map(x
 -> x.getValue()).toArray(String[]::new);
                }
                @RestOp(path="/",method="*")
                public Reader echoMethod(@Method String method) {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_BeanContext_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_BeanContext_Test.java
index 59934b991..a0359a914 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_BeanContext_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_BeanContext_Test.java
@@ -43,7 +43,7 @@ public class RestClient_Config_BeanContext_Test {
                }
                @RestGet
                public String[] checkHeader(org.apache.juneau.rest.RestRequest 
req) {
-                       return 
req.getHeaders().getAll(req.getHeader("Check").orElse(null)).stream().map(x -> 
x.getValue()).toArray(String[]::new);
+                       return 
req.getHeaders().getAll(req.getHeaderParam("Check").orElse(null)).stream().map(x
 -> x.getValue()).toArray(String[]::new);
                }
                @RestGet
                public Reader checkQuery(org.apache.juneau.rest.RestRequest 
req) {
@@ -92,7 +92,7 @@ public class RestClient_Config_BeanContext_Test {
        public static class A2b extends BasicRestObject {
                @RestPost
                public Reader test(org.apache.juneau.rest.RestRequest 
req,org.apache.juneau.rest.RestResponse res) throws IOException {
-                       res.setHeader("X",req.getHeader("X").orElse(null));
+                       res.setHeader("X",req.getHeaderParam("X").orElse(null));
                        return req.getContent().getReader();
                }
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_OpenApi_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_OpenApi_Test.java
index eb23dee5b..eb1962d38 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_OpenApi_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_OpenApi_Test.java
@@ -38,7 +38,7 @@ public class RestClient_Config_OpenApi_Test {
                }
                @RestGet
                public String[] checkHeader(org.apache.juneau.rest.RestRequest 
req) {
-                       return 
req.getHeaders().getAll(req.getHeader("Check").orElse(null)).stream().map(x -> 
x.getValue()).toArray(String[]::new);
+                       return 
req.getHeaders().getAll(req.getHeaderParam("Check").orElse(null)).stream().map(x
 -> x.getValue()).toArray(String[]::new);
                }
                @RestGet
                public Reader checkQuery(org.apache.juneau.rest.RestRequest 
req) {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
index f7ecf7290..83a65f6b7 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Config_RestClient_Test.java
@@ -87,7 +87,7 @@ public class RestClient_Config_RestClient_Test {
                }
                @RestOp(path="/checkHeader")
                public String[] getHeader(org.apache.juneau.rest.RestRequest 
req) {
-                       return 
req.getHeaders().getAll(req.getHeader("Check").orElse(null)).stream().map(x -> 
x.getValue()).toArray(String[]::new);
+                       return 
req.getHeaders().getAll(req.getHeaderParam("Check").orElse(null)).stream().map(x
 -> x.getValue()).toArray(String[]::new);
                }
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
index e1091754a..f0e808773 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Headers_Test.java
@@ -65,7 +65,7 @@ public class RestClient_Headers_Test {
        public static class A extends BasicRestObject implements 
BasicUniversalConfig {
                @RestGet
                public String[] headers(org.apache.juneau.rest.RestRequest req) 
{
-                       return 
req.getHeaders().getAll(req.getHeader("Check").orElse(null)).stream().map(x -> 
x.getValue()).toArray(String[]::new);
+                       return 
req.getHeaders().getAll(req.getHeaderParam("Check").orElse(null)).stream().map(x
 -> x.getValue()).toArray(String[]::new);
                }
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Headers_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Headers_Test.java
index a1ef88111..e25821b96 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Headers_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Headers_Test.java
@@ -39,7 +39,7 @@ public class RestClient_Response_Headers_Test {
        public static class A extends BasicRestObject {
                @RestGet
                public String echo(org.apache.juneau.rest.RestRequest req, 
org.apache.juneau.rest.RestResponse res) {
-                       String c = req.getHeader("Check").orElse(null);
+                       String c = req.getHeaderParam("Check").orElse(null);
                        String[] h = req.getHeaders().getAll(c).stream().map(x 
-> x.getValue()).toArray(String[]::new);
                        if (h != null)
                                for (String hh : h)
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Test.java
index c62f04ab3..3df9a1ab8 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Test.java
@@ -124,8 +124,8 @@ public class RestClient_Response_Test {
        public static class C extends BasicRestObject {
                @RestGet(path="/")
                public String getHeader(org.apache.juneau.rest.RestRequest req, 
org.apache.juneau.rest.RestResponse res) {
-                       String n = req.getHeader("Check").orElse(null);
-                       String v = req.getHeader(n).orElse(null);
+                       String n = req.getHeaderParam("Check").orElse(null);
+                       String v = req.getHeaderParam(n).orElse(null);
                        res.setHeader(n,v);
                        return v;
                }

Reply via email to