Default method using explicitly comma
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 cf56f69..bf98ee3 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
@@ -194,7 +194,7 @@
public String getHeaderString(String name);
/**
- * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.
*
* 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
@@ -210,7 +210,7 @@
* @param valueSeparatorRegex Separates the header value into single values. {@code null} does not split.
* @param valuePredicate value must fulfil this predicate.
* @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
- * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * matching the predicate, or having at least one whitespace-trimmed single value in a token-separated list of single values.
* @see #getHeaders()
* @see #getHeaderString(String)
* @since 4.0
@@ -218,6 +218,31 @@
public boolean containsHeaderString(String name, String valueSeparatorRegex, Predicate<String> valuePredicate);
/**
+ * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ *
+ * 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.
+ *
+ * <p>
+ * For example: {@code containsHeaderString("cache-control", "no-store"::equalsIgnoreCase)} will return {@code true} if
+ * a {@code Cache-Control} header exists that has the value {@code no-store}, the value {@code No-Store} or the value
+ * {@code Max-Age, NO-STORE, no-transform}, but {@code false} when it has the value {@code no-store;no-transform}
+ * (missing comma), or the value {@code no - store} (whitespace within value).
+ *
+ * @param name the message header.
+ * @param valuePredicate value must fulfil this predicate.
+ * @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
+ * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * @see #getHeaders()
+ * @see #getHeaderString(String)
+ * @since 4.0
+ */
+ default public boolean containsHeaderString(String name, Predicate<String> valuePredicate) {
+ return containsHeaderString(name, ",", valuePredicate);
+ }
+
+ /**
* Get message date.
*
* @return the message date, otherwise {@code null} if not present.
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 7956d31..2ba9962 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
@@ -90,7 +90,7 @@
public String getHeaderString(String name);
/**
- * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.
*
* <p>
* For example: {@code containsHeaderString("cache-control", ",", "no-store"::equalsIgnoreCase)} will return {@code true} if
@@ -102,7 +102,7 @@
* @param valueSeparatorRegex Separates the header value into single values. {@code null} does not split.
* @param valuePredicate value must fulfil this predicate.
* @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
- * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * matching the predicate, or having at least one whitespace-trimmed single value in a token-separated list of single values.
* @see #getHeaders()
* @see #getHeaderString(String)
* @since 4.0
@@ -110,6 +110,27 @@
public boolean containsHeaderString(String name, String valueSeparatorRegex, Predicate<String> valuePredicate);
/**
+ * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ *
+ * <p>
+ * For example: {@code containsHeaderString("cache-control", "no-store"::equalsIgnoreCase)} will return {@code true} if
+ * a {@code Cache-Control} header exists that has the value {@code no-store}, the value {@code No-Store} or the value
+ * {@code Max-Age, NO-STORE, no-transform}, but {@code false} when it has the value {@code no-store;no-transform}
+ * (missing comma), or the value {@code no - store} (whitespace within value).
+ *
+ * @param name the message header.
+ * @param valuePredicate value must fulfil this predicate.
+ * @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
+ * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * @see #getHeaders()
+ * @see #getHeaderString(String)
+ * @since 4.0
+ */
+ default public boolean containsHeaderString(String name, Predicate<String> valuePredicate) {
+ return containsHeaderString(name, ",", valuePredicate);
+ }
+
+ /**
* Get the allowed HTTP methods from the Allow HTTP header.
*
* @return the allowed HTTP methods, all methods will returned as upper case strings.
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 6046edf..6577f3c 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
@@ -230,7 +230,7 @@
public String getHeaderString(String name);
/**
- * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.
*
* <p>
* For example: {@code containsHeaderString("cache-control", ",", "no-store"::equalsIgnoreCase)} will return {@code true} if
@@ -242,7 +242,7 @@
* @param valueSeparatorRegex Separates the header value into single values. {@code null} does not split.
* @param valuePredicate value must fulfil this predicate.
* @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
- * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * matching the predicate, or having at least one whitespace-trimmed single value in a token-separated list of single values.
* @see #getHeaders()
* @see #getHeaderString(String)
* @since 4.0
@@ -250,6 +250,27 @@
public boolean containsHeaderString(String name, String valueSeparatorRegex, Predicate<String> valuePredicate);
/**
+ * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ *
+ * <p>
+ * For example: {@code containsHeaderString("cache-control", "no-store"::equalsIgnoreCase)} will return {@code true} if
+ * a {@code Cache-Control} header exists that has the value {@code no-store}, the value {@code No-Store} or the value
+ * {@code Max-Age, NO-STORE, no-transform}, but {@code false} when it has the value {@code no-store;no-transform}
+ * (missing comma), or the value {@code no - store} (whitespace within value).
+ *
+ * @param name the message header.
+ * @param valuePredicate value must fulfil this predicate.
+ * @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
+ * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * @see #getHeaders()
+ * @see #getHeaderString(String)
+ * @since 4.0
+ */
+ default public boolean containsHeaderString(String name, Predicate<String> valuePredicate) {
+ return containsHeaderString(name, ",", valuePredicate);
+ }
+
+ /**
* Get message date.
*
* @return the message date, otherwise {@code null} if not present.
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 cfd5d70..878001a 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
@@ -116,7 +116,7 @@
public String getHeaderString(String name);
/**
- * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.
*
* 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
@@ -132,7 +132,7 @@
* @param valueSeparatorRegex Separates the header value into single values. {@code null} does not split.
* @param valuePredicate value must fulfil this predicate.
* @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
- * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * matching the predicate, or having at least one whitespace-trimmed single value in a token-separated list of single values.
* @see #getHeaders()
* @see #getHeaderString(String)
* @since 4.0
@@ -140,6 +140,31 @@
public boolean containsHeaderString(String name, String valueSeparatorRegex, Predicate<String> valuePredicate);
/**
+ * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ *
+ * 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.
+ *
+ * <p>
+ * For example: {@code containsHeaderString("cache-control", "no-store"::equalsIgnoreCase)} will return {@code true} if
+ * a {@code Cache-Control} header exists that has the value {@code no-store}, the value {@code No-Store} or the value
+ * {@code Max-Age, NO-STORE, no-transform}, but {@code false} when it has the value {@code no-store;no-transform}
+ * (missing comma), or the value {@code no - store} (whitespace within value).
+ *
+ * @param name the message header.
+ * @param valuePredicate value must fulfil this predicate.
+ * @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
+ * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * @see #getHeaders()
+ * @see #getHeaderString(String)
+ * @since 4.0
+ */
+ default public boolean containsHeaderString(String name, Predicate<String> valuePredicate) {
+ return containsHeaderString(name, ",", valuePredicate);
+ }
+
+ /**
* Get the allowed HTTP methods from the Allow HTTP header.
*
* @return the allowed HTTP methods, all methods will returned as upper case strings.
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 802808a..62e3431 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
@@ -62,7 +62,7 @@
public String getHeaderString(String name);
/**
- * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ * Checks whether a header with a specific name and value (or item of the token-separated value list) exists.
*
* 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
@@ -78,7 +78,7 @@
* @param valueSeparatorRegex Separates the header value into single values. {@code null} does not split.
* @param valuePredicate value must fulfil this predicate.
* @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
- * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * matching the predicate, or having at least one whitespace-trimmed single value in a token-separated list of single values.
* @see #getRequestHeaders()
* @see #getHeaderString(String)
* @since 4.0
@@ -86,6 +86,31 @@
public boolean containsHeaderString(String name, String valueSeparatorRegex, Predicate<String> valuePredicate);
/**
+ * Checks whether a header with a specific name and value (or item of the comma-separated value list) exists.
+ *
+ * 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.
+ *
+ * <p>
+ * For example: {@code containsHeaderString("cache-control", "no-store"::equalsIgnoreCase)} will return {@code true} if
+ * a {@code Cache-Control} header exists that has the value {@code no-store}, the value {@code No-Store} or the value
+ * {@code Max-Age, NO-STORE, no-transform}, but {@code false} when it has the value {@code no-store;no-transform}
+ * (missing comma), or the value {@code no - store} (whitespace within value).
+ *
+ * @param name the message header.
+ * @param valuePredicate value must fulfil this predicate.
+ * @return {@code true} if and only if a header with the given name exists, having either a whitespace-trimmed value
+ * matching the predicate, or having at least one whitespace-trimmed single value in a comma-separated list of single values.
+ * @see #getRequestHeaders()
+ * @see #getHeaderString(String)
+ * @since 4.0
+ */
+ default public boolean containsHeaderString(String name, Predicate<String> valuePredicate) {
+ return containsHeaderString(name, ",", valuePredicate);
+ }
+
+ /**
* Get the values of HTTP request headers. The returned Map is case-insensitive wrt. keys and is read-only. The method
* never returns {@code null}.
*