Can specify separation character for getHeaderString
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java
index 51060ef..011abef 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientRequestContext.java
@@ -184,14 +184,37 @@
      * is available via {@link jakarta.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} for the header value
      * class or using its {@code toString} method if a header delegate is not available.
      *
+     * This is a convenience method for {@code getHeaderString(name, ",")}.
+     *
      * @param name the message header.
      * @return the message header value. If the message header is not present then {@code null} is returned. If the message
      * header is present but has no value then the empty string is returned. If the message header is present more than once
      * then the values of joined together and separated by a ',' character.
      * @see #getHeaders()
      * @see #getStringHeaders()
+     * @see #getHeaderString(String, String)
      */
-    public String getHeaderString(String name);
+    public default String getHeaderString(String name) {
+        return getHeaderString(name, ",");
+    }
+
+    /**
+     * Get a message header as a single string value.
+     *
+     * Each single non-string header value is converted to String using a {@link jakarta.ws.rs.ext.RuntimeDelegate.HeaderDelegate} if one
+     * is available via {@link jakarta.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} for the header value
+     * class or using its {@code toString} method if a header delegate is not available.
+     *
+     * @param name the message header.
+     * @param separator the separation character.
+     * @return the message header value. If the message header is not present then {@code null} is returned. If the message
+     * header is present but has no value then the empty string is returned. If the message header is present more than once
+     * then the values of joined together and separated by the provided separation character.
+     * @see #getHeaders()
+     * @see #getStringHeaders()
+     * @since 4.0
+     */
+    public String getHeaderString(String name, String separator);
 
     /**
      * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java
index 5169f96..e679584 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/client/ClientResponseContext.java
@@ -81,13 +81,31 @@
     /**
      * Get a message header as a single string value.
      *
+     * This is a convenience method for {@code getHeaderString(name, ",")}.
+     *
      * @param name the message header.
      * @return the message header value. If the message header is not present then {@code null} is returned. If the message
      * header is present but has no value then the empty string is returned. If the message header is present more than once
      * then the values of joined together and separated by a ',' character.
      * @see #getHeaders()
+     * @see #getHeaderString(String, String)
      */
-    public String getHeaderString(String name);
+    public default String getHeaderString(String name) {
+        return getHeaderString(name, ",");
+    }
+
+    /**
+     * Get a message header as a single string value.
+     *
+     * @param name the message header.
+     * @param separator the separation character.
+     * @return the message header value. If the message header is not present then {@code null} is returned. If the message
+     * header is present but has no value then the empty string is returned. If the message header is present more than once
+     * then the values of joined together and separated by the provided separation character.
+     * @see #getHeaders()
+     * @since 4.0
+     */
+    public String getHeaderString(String name, String separator);
 
     /**
      * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java
index bc91257..88aed79 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerRequestContext.java
@@ -221,13 +221,31 @@
     /**
      * Get a message header as a single string value.
      *
+     * This is a convenience method for {@code getHeaderString(name, ",")}.
+     *
      * @param name the message header.
      * @return the message header value. If the message header is not present then {@code null} is returned. If the message
      * header is present but has no value then the empty string is returned. If the message header is present more than once
      * then the values of joined together and separated by a ',' character.
      * @see #getHeaders()
+     * @see #getHeaderString(String, String)
      */
-    public String getHeaderString(String name);
+    public default String getHeaderString(String name) {
+        return getHeaderString(name, ",");
+    }
+
+    /**
+     * Get a message header as a single string value.
+     *
+     * @param name the message header.
+     * @param separator the separation character.
+     * @return the message header value. If the message header is not present then {@code null} is returned. If the message
+     * header is present but has no value then the empty string is returned. If the message header is present more than once
+     * then the values of joined together and separated by the provided separation character.
+     * @see #getHeaders()
+     * @since 4.0
+     */
+    public String getHeaderString(String name, String separator);
 
     /**
      * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java
index f1e1562..9d71440 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/container/ContainerResponseContext.java
@@ -106,14 +106,37 @@
      * is available via {@link jakarta.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} for the header value
      * class or using its {@code toString} method if a header delegate is not available.
      *
+     * This is a convenience method for {@code getHeaderString(name, ",")}.
+     *
      * @param name the message header.
      * @return the message header value. If the message header is not present then {@code null} is returned. If the message
      * header is present but has no value then the empty string is returned. If the message header is present more than once
      * then the values of joined together and separated by a ',' character.
      * @see #getHeaders()
      * @see #getStringHeaders()
+     * @see #getHeaderString(String, String)
      */
-    public String getHeaderString(String name);
+    public default String getHeaderString(String name) {
+        return getHeaderString(name, ",");
+    }
+
+    /**
+     * Get a message header as a single string value.
+     *
+     * Each single non-string header value is converted to String using a {@link jakarta.ws.rs.ext.RuntimeDelegate.HeaderDelegate} if one
+     * is available via {@link jakarta.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} for the header value
+     * class or using its {@code toString} method if a header delegate is not available.
+     *
+     * @param name the message header.
+     * @param separator the separation character.
+     * @return the message header value. If the message header is not present then {@code null} is returned. If the message
+     * header is present but has no value then the empty string is returned. If the message header is present more than once
+     * then the values of joined together and separated by the provided separation character.
+     * @see #getHeaders()
+     * @see #getStringHeaders()
+     * @since 4.0
+     */
+    public String getHeaderString(String name, String separator);
 
     /**
      * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
index 0506be4..1f27f82 100644
--- a/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
+++ b/jaxrs-api/src/main/java/jakarta/ws/rs/core/HttpHeaders.java
@@ -52,6 +52,8 @@
      * is available via {@link jakarta.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} for the header value
      * class or using its {@code toString} method if a header delegate is not available.
      *
+     * This is a convenience method for {@code getHeaderString(name, ",")}.
+     *
      * @param name the HTTP header.
      * @return the HTTP header value. If the HTTP header is not present then {@code null} is returned. If the HTTP header is
      * present but has no value then the empty string is returned. If the HTTP header is present more than once then the
@@ -59,7 +61,27 @@
      * @see #getRequestHeader(java.lang.String)
      * @since 2.0
      */
-    public String getHeaderString(String name);
+    public default String getHeaderString(String name) {
+        return getHeaderString(name, ",");
+    }
+
+    /**
+     * <p>
+     * Get a HTTP header as a single string value.
+     * </p>
+     * Each single non-string header value is converted to String using a {@link jakarta.ws.rs.ext.RuntimeDelegate.HeaderDelegate} if one
+     * is available via {@link jakarta.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} for the header value
+     * class or using its {@code toString} method if a header delegate is not available.
+     *
+     * @param name the HTTP header.
+     * @param separator the separation character.
+     * @return the HTTP header value. If the HTTP header is not present then {@code null} is returned. If the HTTP header is
+     * present but has no value then the empty string is returned. If the HTTP header is present more than once then the
+     * values of joined together and separated by the provided separation character.
+     * @see #getRequestHeader(java.lang.String)
+     * @since 4.0
+     */
+    public String getHeaderString(String name, String separator);
 
     /**
      * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.