Added additional testing including regular expression and made small change to clarify javadoc from code review.
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 6bf01a0..5c2ee4a 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
@@ -207,7 +207,8 @@
* (missing comma), or the value {@code no - store} (whitespace within value).
*
* @param name the message header.
- * @param valueSeparatorRegex Separates the header value into single values. {@code null} does not split.
+ * @param valueSeparatorRegex String or regular expression that 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 token-separated list of single values.
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 756e428..c6b6d14 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
@@ -99,7 +99,8 @@
* (missing comma), or the value {@code no - store} (whitespace within value).
*
* @param name the message header.
- * @param valueSeparatorRegex Separates the header value into single values. {@code null} does not split.
+ * @param valueSeparatorRegex String or regular expression that 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 token-separated list of single values.
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java
index 65087cd..90dc2f7 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientrequestcontext/JAXRSClientIT.java
@@ -17,6 +17,7 @@
package ee.jakarta.tck.ws.rs.api.client.clientrequestcontext;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import java.io.ByteArrayInputStream;
import java.lang.annotation.Annotation;
@@ -874,22 +875,31 @@
ContextProvider provider = new ContextProvider() {
@Override
protected void checkFilterContext(ClientRequestContext context) throws Fault {
- assertTrue(context.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase));
- assertTrue(context.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase));
- assertTrue(!(context.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase)));
- assertTrue(!(context.containsHeaderString("cache-control", ",", "no-transform"::equals)));
- assertTrue(context.containsHeaderString("cache-control2", ";", "no-transform"::equalsIgnoreCase));
- assertTrue(!(context.containsHeaderString("cache-control2", ",",
- "no-transform"::equalsIgnoreCase)));
+ assertTrue(context.containsHeaderString("header1", "value"::equalsIgnoreCase));
+ assertTrue(context.containsHeaderString("HEADER1", ",", "value2"::equals));
+ //Incorrect separator character
+ assertFalse(context.containsHeaderString("header1", ";", "value2"::equalsIgnoreCase));
+ //Shouldn't find first value when separator character is incorrect
+ assertFalse(context.containsHeaderString("header1", ";", "value1"::equalsIgnoreCase));
+ //Test regular expression
+ assertFalse(context.containsHeaderString("header1", "; | ,", "value2"::equalsIgnoreCase));
+ //White space in value not trimmed
+ assertFalse(context.containsHeaderString("header1", "whitespace"::equalsIgnoreCase));
+ //Multiple character separator
+ assertTrue(context.containsHeaderString("header2", "::", "Value5"::equalsIgnoreCase));
+ //Test default separator is comma
+ assertFalse(context.containsHeaderString("header3","value6"::equalsIgnoreCase));
String entity = "Success";
Response r = Response.ok(entity).build();
context.abortWith(r);
}
};
Invocation invocation = buildBuilder(provider)
- .header("cache-control", "no-store")
- .header("cache-control", "{Max - Age, no-transform}")
- .header("cache-control2", "{no-store;no-transform}")
+ .header("header1", "value")
+ .header("header1", "value1 , value2")
+ .header("header1", "Value3,white space ")
+ .header("header2", "Value4::Value5")
+ .header("header3", "value6;value7")
.buildGet();
Response response = invoke(invocation);
diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java
index 50bea0f..a0123ee 100644
--- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java
+++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/api/client/clientresponsecontext/JAXRSClientIT.java
@@ -16,6 +16,7 @@
package ee.jakarta.tck.ws.rs.api.client.clientresponsecontext;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.BufferedReader;
@@ -437,7 +438,7 @@
*/
@Test
public void containsHeaderStringTest() throws Fault {
- final String header1 = "cache-control";
+ final String header1 = "Header1";
final String value1 = "no-store";
final String value2 = "{Max - Age, no-transform}";
final String header2 = "header2";
@@ -447,18 +448,28 @@
@Override
protected void checkFilterContext(ClientRequestContext requestContext,
ClientResponseContext responseContext) throws Fault {
- assertTrue(responseContext.containsHeaderString("cache-control", "no-store"::equalsIgnoreCase));
- assertTrue(responseContext.containsHeaderString("CACHE-CONTROL", ",", "no-transform"::equalsIgnoreCase));
- assertTrue(!(responseContext.containsHeaderString("CACHE-CONTROL", ",", "Max-Age"::equalsIgnoreCase)));
- assertTrue(!(responseContext.containsHeaderString("cache-control", ",", "no-transform"::equals)));
- assertTrue(responseContext.containsHeaderString("header2", ";", "no-transform"::equalsIgnoreCase));
- assertTrue(!(responseContext.containsHeaderString("Header2", ",", "no-transform"::equalsIgnoreCase)));
+ assertTrue(responseContext.containsHeaderString("header1", "value"::equalsIgnoreCase));
+ assertTrue(responseContext.containsHeaderString("HEADER1", ",", "value2"::equals));
+ //Incorrect separator character
+ assertFalse(responseContext.containsHeaderString("header1", ";", "value2"::equalsIgnoreCase));
+ //Shouldn't find first value when separator character is incorrect
+ assertFalse(responseContext.containsHeaderString("header1", ";", "value1"::equalsIgnoreCase));
+ //Test regular expression
+ assertFalse(responseContext.containsHeaderString("header1", "; | ,", "value2"::equalsIgnoreCase));
+ //White space in value not trimmed
+ assertFalse(responseContext.containsHeaderString("header1", "whitespace"::equalsIgnoreCase));
+ //Multiple character separator
+ assertTrue(responseContext.containsHeaderString("header2", "::", "Value5"::equalsIgnoreCase));
+ //Test default separator is comma
+ assertFalse(responseContext.containsHeaderString("header3","value6"::equalsIgnoreCase));
}
};
Response response = Response.ok()
- .header(header1, value1)
- .header(header1, value2)
- .header(header2, value3)
+ .header("header1", "value")
+ .header("header1", "value1 , value2")
+ .header("header1", "Value3,white space ")
+ .header("header2", "Value4::Value5")
+ .header("header3", "value6;value7")
.build();
invokeWithResponseAndAssertStatus(response, Status.OK, in);
}