From 1471934217fbe7c9b98c80cbf73a8c9f63aa0de6 Mon Sep 17 00:00:00 2001 From: Adam Anderson Date: Fri, 14 Jun 2024 16:18:44 -0500 Subject: [PATCH 1/3] [283] Add new RestClientBuilder method for adding headers. Signed-off-by: Adam Anderson --- .../rest/client/RestClientBuilder.java | 14 +++ .../rest/client/BuilderImpl1.java | 5 + .../rest/client/BuilderImpl2.java | 5 + .../src/main/asciidoc/clientexamples.asciidoc | 13 ++ .../client/tck/ClientBuilderHeaderTest.java | 116 ++++++++++++++++++ .../interfaces/ClientBuilderHeaderClient.java | 35 ++++++ ...rnWithAllDuplicateClientHeadersFilter.java | 47 +++++++ 7 files changed, 235 insertions(+) create mode 100644 tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java create mode 100644 tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderClient.java create mode 100644 tck/src/main/java/org/eclipse/microprofile/rest/client/tck/providers/ReturnWithAllDuplicateClientHeadersFilter.java diff --git a/api/src/main/java/org/eclipse/microprofile/rest/client/RestClientBuilder.java b/api/src/main/java/org/eclipse/microprofile/rest/client/RestClientBuilder.java index 7279c062..a28590fc 100644 --- a/api/src/main/java/org/eclipse/microprofile/rest/client/RestClientBuilder.java +++ b/api/src/main/java/org/eclipse/microprofile/rest/client/RestClientBuilder.java @@ -269,6 +269,20 @@ default RestClientBuilder baseUri(String uri) { */ RestClientBuilder queryParamStyle(QueryParamStyle style); + /** + * Add an arbitrary header. + * + * @param name + * - the name of the header + * @param name + * - the value of the HTTP header to add to the request. + * @return the current builder with the header added to the request. + * @throws NullPointerException + * if the value is null. + * @since 4.0 + */ + RestClientBuilder header(String name, Object value); + /** * Based on the configured RestClientBuilder, creates a new instance of the given REST interface to invoke API calls * against. diff --git a/api/src/test/java/org/eclipse/microprofile/rest/client/BuilderImpl1.java b/api/src/test/java/org/eclipse/microprofile/rest/client/BuilderImpl1.java index 1a38d650..daac7ad2 100644 --- a/api/src/test/java/org/eclipse/microprofile/rest/client/BuilderImpl1.java +++ b/api/src/test/java/org/eclipse/microprofile/rest/client/BuilderImpl1.java @@ -90,6 +90,11 @@ public RestClientBuilder queryParamStyle(QueryParamStyle style) { throw new IllegalStateException("not implemented"); } + @Override + public RestClientBuilder header(String name, Object value) { + throw new IllegalStateException("not implemented"); + } + @Override public T build(Class clazz) { throw new IllegalStateException("not implemented"); diff --git a/api/src/test/java/org/eclipse/microprofile/rest/client/BuilderImpl2.java b/api/src/test/java/org/eclipse/microprofile/rest/client/BuilderImpl2.java index 64051ba6..83f93227 100644 --- a/api/src/test/java/org/eclipse/microprofile/rest/client/BuilderImpl2.java +++ b/api/src/test/java/org/eclipse/microprofile/rest/client/BuilderImpl2.java @@ -90,6 +90,11 @@ public RestClientBuilder queryParamStyle(QueryParamStyle style) { throw new IllegalStateException("not implemented"); } + @Override + public RestClientBuilder header(String name, Object value) { + throw new IllegalStateException("not implemented"); + } + @Override public T build(Class clazz) { throw new IllegalStateException("not implemented"); diff --git a/spec/src/main/asciidoc/clientexamples.asciidoc b/spec/src/main/asciidoc/clientexamples.asciidoc index 33e11ea8..de26040a 100644 --- a/spec/src/main/asciidoc/clientexamples.asciidoc +++ b/spec/src/main/asciidoc/clientexamples.asciidoc @@ -149,6 +149,19 @@ implementation must invoke the `DefaultClientHeadersFactoryImpl`. This default f `org.eclipse.microprofile.rest.client.propagateHeaders` +You can also configure headers on a per instance basis using the `RestClientBuilder.header(String name, Object value)` method. Headers added via this method will be merged with the headers added via `@ClientHeaderParam` annotations, `@HeaderParam` annotations, and `ClientHeadersFactory` implementations. +**Note: The method will throw a `NullPointerException` if the value is `null`.** + +Example: + +[source, java] +---- +RedirectClient client = RestClientBuilder.newBuilder() + .baseUri(someUri) + .header("Some-Header", headerValueObj) + .build(SomeClient.class); +---- + === Following Redirect Responses By default, a Rest Client instance will not automatically follow redirect responses. Redirect responses are typically responses with status codes in the 300 range and include `Location` header that indicates the URL of the redirected resource. diff --git a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java new file mode 100644 index 00000000..57a11eee --- /dev/null +++ b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java @@ -0,0 +1,116 @@ +/* + * Copyright 2024 Contributors to the Eclipse Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.eclipse.microprofile.rest.client.tck; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static org.testng.Assert.assertTrue; +import static org.testng.Assert.fail; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import org.eclipse.microprofile.rest.client.RestClientBuilder; +import org.eclipse.microprofile.rest.client.tck.interfaces.ClientBuilderHeaderClient; +import org.eclipse.microprofile.rest.client.tck.providers.ReturnWithAllClientHeadersFilter; +import org.eclipse.microprofile.rest.client.tck.providers.ReturnWithAllDuplicateClientHeadersFilter; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.github.tomakehurst.wiremock.client.MappingBuilder; + +import jakarta.json.JsonArray; +import jakarta.json.JsonObject; + +public class ClientBuilderHeaderTest extends WiremockArquillianTest { + @Deployment + public static Archive createDeployment() { + return ShrinkWrap.create(WebArchive.class, ClientBuilderHeaderTest.class.getSimpleName() + ".war") + .addClasses( + ClientBuilderHeaderClient.class, + ReturnWithAllDuplicateClientHeadersFilter.class, + WiremockArquillianTest.class); + } + + private static void stub(String expectedHeaderName, String... expectedHeaderValue) { + String expectedIncomingHeader = Arrays.stream(expectedHeaderValue) + .collect(Collectors.joining(",")); + String outputBody = expectedIncomingHeader.replace(',', '-'); + MappingBuilder mappingBuilder = get(urlEqualTo("/")); + + // headers can be sent either in a single line with comma-separated values or in multiple lines + // this should match both cases: + Arrays.stream(expectedHeaderValue) + .forEach(val -> mappingBuilder.withHeader(expectedHeaderName, containing(val))); + stubFor( + mappingBuilder + .willReturn( + aResponse().withStatus(200) + .withBody(outputBody))); + } + @BeforeTest + public void resetWiremock() { + setupServer(); + } + + @Test + public void testHeaderBuilderMethod() { + stub("InterfaceAndBuilderHeader", "builder", "interface", "method"); + + RestClientBuilder builder = RestClientBuilder.newBuilder().baseUri(getServerURI()); + builder.register(ReturnWithAllClientHeadersFilter.class); + builder.header("InterfaceAndBuilderHeader", "builder"); + ClientBuilderHeaderClient client = builder.build(ClientBuilderHeaderClient.class); + + JsonObject headers = client.getAllHeaders("headerparam"); + JsonArray header = headers.getJsonArray("InterfaceAndBuilderHeader"); + final List headerValues = + header.stream().map(v -> v.toString().toLowerCase()).collect(Collectors.toList()); + + assertTrue(headerValues.contains("builder"), + "Header InterfaceAndBuilderHeader did not container \"builder\": " + headers); + assertTrue(headerValues.contains("interface"), + "Header InterfaceAndBuilderHeader did not container \"interface\": " + headers); + assertTrue(headerValues.contains("method"), + "Header InterfaceAndBuilderHeader did not container \"method\": " + headers); + assertTrue(headers.get("HeaderParam").toString().contains("headerparam"), + "Header HeaderParam did not container \"headerparam\": " + headers); + } + + @Test + public void testHeaderBuilderMethodNullValue() { + stub("BuilderHeader", "BuilderHeaderValue"); + + RestClientBuilder builder = RestClientBuilder.newBuilder().baseUri(getServerURI()); + try { + builder.header("BuilderHeader", null); + } catch (NullPointerException npe) { + return; + } + fail("header(\"builderHeader\", null) should have thrown a NullPointerException"); + } +} diff --git a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderClient.java b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderClient.java new file mode 100644 index 00000000..c7829e73 --- /dev/null +++ b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderClient.java @@ -0,0 +1,35 @@ +/* + * Copyright 2024 Contributors to the Eclipse Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.eclipse.microprofile.rest.client.tck.interfaces; + +import org.eclipse.microprofile.rest.client.annotation.ClientHeaderParam; + +import jakarta.json.JsonObject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HeaderParam; +import jakarta.ws.rs.Path; + +@ClientHeaderParam(name = "InterfaceAndBuilderHeader", value = "interface") +@Path("/") +public interface ClientBuilderHeaderClient { + + @GET + @ClientHeaderParam(name = "InterfaceAndBuilderHeader", value = "method") + JsonObject getAllHeaders(@HeaderParam("HeaderParam") String param); +} diff --git a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/providers/ReturnWithAllDuplicateClientHeadersFilter.java b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/providers/ReturnWithAllDuplicateClientHeadersFilter.java new file mode 100644 index 00000000..94d5a83a --- /dev/null +++ b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/providers/ReturnWithAllDuplicateClientHeadersFilter.java @@ -0,0 +1,47 @@ +/* + * Copyright 2018, 2021 Contributors to the Eclipse Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.eclipse.microprofile.rest.client.tck.providers; + +import java.io.IOException; +import java.util.List; + +import jakarta.json.Json; +import jakarta.json.JsonArrayBuilder; +import jakarta.json.JsonObjectBuilder; +import jakarta.ws.rs.client.ClientRequestContext; +import jakarta.ws.rs.client.ClientRequestFilter; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; + +public class ReturnWithAllDuplicateClientHeadersFilter implements ClientRequestFilter { + + @Override + public void filter(ClientRequestContext clientRequestContext) throws IOException { + JsonObjectBuilder allClientHeaders = Json.createObjectBuilder(); + MultivaluedMap clientHeaders = clientRequestContext.getHeaders(); + for (String headerName : clientHeaders.keySet()) { + List header = clientHeaders.get(headerName); + final JsonArrayBuilder headerValues = Json.createArrayBuilder(); + header.forEach(h -> headerValues.add(h.toString())); + allClientHeaders.add(headerName, headerValues); + } + clientRequestContext.abortWith(Response.ok(allClientHeaders.build()).build()); + } + +} From 19350d6e1f8b72b93a73bdc14cc1f5933806529a Mon Sep 17 00:00:00 2001 From: "James R. Perkins" Date: Fri, 14 Jun 2024 15:13:49 -0700 Subject: [PATCH 2/3] Add a new interface and test for testing the method and the interface ClientHeaderParam annotations as they can only be defined on either the method or the interface, but not both. Signed-off-by: James R. Perkins --- .../client/tck/ClientBuilderHeaderTest.java | 94 +++++++++---------- .../interfaces/ClientBuilderHeaderClient.java | 1 - .../ClientBuilderHeaderMethodClient.java | 34 +++++++ 3 files changed, 78 insertions(+), 51 deletions(-) create mode 100644 tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderMethodClient.java diff --git a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java index 57a11eee..674eb939 100644 --- a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java +++ b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java @@ -18,94 +18,65 @@ package org.eclipse.microprofile.rest.client.tck; -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.containing; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; -import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import org.eclipse.microprofile.rest.client.RestClientBuilder; import org.eclipse.microprofile.rest.client.tck.interfaces.ClientBuilderHeaderClient; -import org.eclipse.microprofile.rest.client.tck.providers.ReturnWithAllClientHeadersFilter; +import org.eclipse.microprofile.rest.client.tck.interfaces.ClientBuilderHeaderMethodClient; import org.eclipse.microprofile.rest.client.tck.providers.ReturnWithAllDuplicateClientHeadersFilter; import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.testng.Arquillian; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.testng.annotations.BeforeTest; +import org.testng.Assert; import org.testng.annotations.Test; -import com.github.tomakehurst.wiremock.client.MappingBuilder; - import jakarta.json.JsonArray; import jakarta.json.JsonObject; +import jakarta.json.JsonString; +import jakarta.json.JsonValue; -public class ClientBuilderHeaderTest extends WiremockArquillianTest { +public class ClientBuilderHeaderTest extends Arquillian { @Deployment public static Archive createDeployment() { return ShrinkWrap.create(WebArchive.class, ClientBuilderHeaderTest.class.getSimpleName() + ".war") .addClasses( - ClientBuilderHeaderClient.class, + ClientBuilderHeaderMethodClient.class, ReturnWithAllDuplicateClientHeadersFilter.class, WiremockArquillianTest.class); } - private static void stub(String expectedHeaderName, String... expectedHeaderValue) { - String expectedIncomingHeader = Arrays.stream(expectedHeaderValue) - .collect(Collectors.joining(",")); - String outputBody = expectedIncomingHeader.replace(',', '-'); - MappingBuilder mappingBuilder = get(urlEqualTo("/")); - - // headers can be sent either in a single line with comma-separated values or in multiple lines - // this should match both cases: - Arrays.stream(expectedHeaderValue) - .forEach(val -> mappingBuilder.withHeader(expectedHeaderName, containing(val))); - stubFor( - mappingBuilder - .willReturn( - aResponse().withStatus(200) - .withBody(outputBody))); - } - @BeforeTest - public void resetWiremock() { - setupServer(); + @Test + public void testHeaderBuilderMethod() { + + RestClientBuilder builder = RestClientBuilder.newBuilder().baseUri("http://localhost:8080/"); + builder.register(ReturnWithAllDuplicateClientHeadersFilter.class); + builder.header("InterfaceAndBuilderHeader", "builder"); + ClientBuilderHeaderMethodClient client = builder.build(ClientBuilderHeaderMethodClient.class); + + checkHeaders(client.getAllHeaders("headerparam"), "method"); } @Test - public void testHeaderBuilderMethod() { - stub("InterfaceAndBuilderHeader", "builder", "interface", "method"); + public void testHeaderBuilderInterface() { - RestClientBuilder builder = RestClientBuilder.newBuilder().baseUri(getServerURI()); - builder.register(ReturnWithAllClientHeadersFilter.class); + RestClientBuilder builder = RestClientBuilder.newBuilder().baseUri("http://localhost:8080/"); + builder.register(ReturnWithAllDuplicateClientHeadersFilter.class); builder.header("InterfaceAndBuilderHeader", "builder"); ClientBuilderHeaderClient client = builder.build(ClientBuilderHeaderClient.class); - JsonObject headers = client.getAllHeaders("headerparam"); - JsonArray header = headers.getJsonArray("InterfaceAndBuilderHeader"); - final List headerValues = - header.stream().map(v -> v.toString().toLowerCase()).collect(Collectors.toList()); - - assertTrue(headerValues.contains("builder"), - "Header InterfaceAndBuilderHeader did not container \"builder\": " + headers); - assertTrue(headerValues.contains("interface"), - "Header InterfaceAndBuilderHeader did not container \"interface\": " + headers); - assertTrue(headerValues.contains("method"), - "Header InterfaceAndBuilderHeader did not container \"method\": " + headers); - assertTrue(headers.get("HeaderParam").toString().contains("headerparam"), - "Header HeaderParam did not container \"headerparam\": " + headers); + checkHeaders(client.getAllHeaders("headerparam"), "interface"); } @Test public void testHeaderBuilderMethodNullValue() { - stub("BuilderHeader", "BuilderHeaderValue"); - RestClientBuilder builder = RestClientBuilder.newBuilder().baseUri(getServerURI()); + RestClientBuilder builder = RestClientBuilder.newBuilder().baseUri("http://localhost:8080/"); try { builder.header("BuilderHeader", null); } catch (NullPointerException npe) { @@ -113,4 +84,27 @@ public void testHeaderBuilderMethodNullValue() { } fail("header(\"builderHeader\", null) should have thrown a NullPointerException"); } + + private static void checkHeaders(final JsonObject headers, final String clientHeaderParamName) { + final List clientRequestHeaders = headerValues(headers, "InterfaceAndBuilderHeader"); + + assertTrue(clientRequestHeaders.contains("builder"), + "Header InterfaceAndBuilderHeader did not container \"builder\": " + clientRequestHeaders); + assertTrue(clientRequestHeaders.contains(clientHeaderParamName), + "Header InterfaceAndBuilderHeader did not container \"" + clientHeaderParamName + "\": " + + clientRequestHeaders); + + final List headerParamHeaders = headerValues(headers, "HeaderParam"); + assertTrue(headerParamHeaders.contains("headerparam"), + "Header HeaderParam did not container \"headerparam\": " + headerParamHeaders); + } + + private static List headerValues(final JsonObject headers, final String headerName) { + final JsonArray headerValues = headers.getJsonArray(headerName); + Assert.assertNotNull(headerValues, + String.format("Expected header '%s' to be present in %s", headerName, headers)); + return headerValues.stream().map( + v -> (v.getValueType() == JsonValue.ValueType.STRING ? ((JsonString) v).getString() : v.toString())) + .collect(Collectors.toList()); + } } diff --git a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderClient.java b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderClient.java index c7829e73..da928043 100644 --- a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderClient.java +++ b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderClient.java @@ -30,6 +30,5 @@ public interface ClientBuilderHeaderClient { @GET - @ClientHeaderParam(name = "InterfaceAndBuilderHeader", value = "method") JsonObject getAllHeaders(@HeaderParam("HeaderParam") String param); } diff --git a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderMethodClient.java b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderMethodClient.java new file mode 100644 index 00000000..00795f5d --- /dev/null +++ b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/interfaces/ClientBuilderHeaderMethodClient.java @@ -0,0 +1,34 @@ +/* + * Copyright 2024 Contributors to the Eclipse Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.eclipse.microprofile.rest.client.tck.interfaces; + +import org.eclipse.microprofile.rest.client.annotation.ClientHeaderParam; + +import jakarta.json.JsonObject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HeaderParam; +import jakarta.ws.rs.Path; + +@Path("/") +public interface ClientBuilderHeaderMethodClient { + + @GET + @ClientHeaderParam(name = "InterfaceAndBuilderHeader", value = "method") + JsonObject getAllHeaders(@HeaderParam("HeaderParam") String param); +} From eeb764d30f964a53b95b1418bc3153c83708591f Mon Sep 17 00:00:00 2001 From: Adam Anderson Date: Mon, 17 Jun 2024 09:35:25 -0500 Subject: [PATCH 3/3] [283] code review change to remove unneeded Wiremock class Signed-off-by: Adam Anderson --- .../microprofile/rest/client/tck/ClientBuilderHeaderTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java index 674eb939..ed949020 100644 --- a/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java +++ b/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/ClientBuilderHeaderTest.java @@ -47,8 +47,7 @@ public static Archive createDeployment() { return ShrinkWrap.create(WebArchive.class, ClientBuilderHeaderTest.class.getSimpleName() + ".war") .addClasses( ClientBuilderHeaderMethodClient.class, - ReturnWithAllDuplicateClientHeadersFilter.class, - WiremockArquillianTest.class); + ReturnWithAllDuplicateClientHeadersFilter.class); } @Test