diff options
Diffstat (limited to 'jaxrs_client_utils/src')
8 files changed, 27 insertions, 18 deletions
diff --git a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JaxRsClientFactory.java b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JaxRsClientFactory.java index 4d5279ebfd4..d004ac3af45 100644 --- a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JaxRsClientFactory.java +++ b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JaxRsClientFactory.java @@ -9,5 +9,5 @@ import com.yahoo.vespa.applicationmodel.HostName; * @author bakksjo */ public interface JaxRsClientFactory { - <T> T createClient(Class<T> apiClass, HostName hostName, int port, String pathPrefix); + <T> T createClient(Class<T> apiClass, HostName hostName, int port, String pathPrefix, String scheme); } diff --git a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JaxRsStrategyFactory.java b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JaxRsStrategyFactory.java index 722652557c7..6523a0c138f 100644 --- a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JaxRsStrategyFactory.java +++ b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JaxRsStrategyFactory.java @@ -34,13 +34,15 @@ import java.util.Set; public class JaxRsStrategyFactory { private final Set<HostName> hostNames; private int port; + private final String scheme; private final JaxRsClientFactory jaxRsClientFactory; // TODO: We might need to support per-host port specification. public JaxRsStrategyFactory( final Set<HostName> hostNames, final int port, - final JaxRsClientFactory jaxRsClientFactory) { + final JaxRsClientFactory jaxRsClientFactory, + String scheme) { if (hostNames.isEmpty()) { throw new IllegalArgumentException("hostNames argument must not be empty"); } @@ -48,19 +50,20 @@ public class JaxRsStrategyFactory { this.hostNames = hostNames; this.port = port; this.jaxRsClientFactory = jaxRsClientFactory; + this.scheme = scheme; } public <T> JaxRsStrategy<T> apiWithRetries(final Class<T> apiClass, final String pathPrefix) { Objects.requireNonNull(apiClass, "apiClass argument may not be null"); Objects.requireNonNull(pathPrefix, "pathPrefix argument may not be null"); - return new RetryingJaxRsStrategy<T>(hostNames, port, jaxRsClientFactory, apiClass, pathPrefix); + return new RetryingJaxRsStrategy<T>(hostNames, port, jaxRsClientFactory, apiClass, pathPrefix, scheme); } public <T> JaxRsStrategy<T> apiNoRetries(final Class<T> apiClass, final String pathPrefix) { Objects.requireNonNull(apiClass, "apiClass argument may not be null"); Objects.requireNonNull(pathPrefix, "pathPrefix argument may not be null"); final HostName hostName = getRandom(hostNames); - return new NoRetryJaxRsStrategy<T>(hostName, port, jaxRsClientFactory, apiClass, pathPrefix); + return new NoRetryJaxRsStrategy<T>(hostName, port, jaxRsClientFactory, apiClass, pathPrefix, scheme); } private static final Random random = new Random(); diff --git a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JerseyJaxRsClientFactory.java b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JerseyJaxRsClientFactory.java index 8d096a0dff6..5fd72432702 100644 --- a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JerseyJaxRsClientFactory.java +++ b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/JerseyJaxRsClientFactory.java @@ -36,8 +36,8 @@ public class JerseyJaxRsClientFactory implements JaxRsClientFactory { * https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/client/HttpUrlConnectorProvider.html#SET_METHOD_WORKAROUND */ @Override - public <T> T createClient(final Class<T> apiClass, final HostName hostName, final int port, final String pathPrefix) { - final UriBuilder uriBuilder = UriBuilder.fromPath(pathPrefix).host(hostName.s()).port(port).scheme("http"); + public <T> T createClient(final Class<T> apiClass, final HostName hostName, final int port, final String pathPrefix, String scheme) { + final UriBuilder uriBuilder = UriBuilder.fromPath(pathPrefix).host(hostName.s()).port(port).scheme(scheme); final Client webClient = ClientBuilder.newClient() .property(ClientProperties.CONNECT_TIMEOUT, connectTimeoutMs) .property(ClientProperties.READ_TIMEOUT, readTimeoutMs) diff --git a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/NoRetryJaxRsStrategy.java b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/NoRetryJaxRsStrategy.java index 0f053332d99..7d70c37a40d 100644 --- a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/NoRetryJaxRsStrategy.java +++ b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/NoRetryJaxRsStrategy.java @@ -18,6 +18,7 @@ public class NoRetryJaxRsStrategy<T> implements JaxRsStrategy<T> { private final int port; private final JaxRsClientFactory jaxRsClientFactory; private final Class<T> apiClass; + private final String scheme; private String pathPrefix; public NoRetryJaxRsStrategy( @@ -25,7 +26,8 @@ public class NoRetryJaxRsStrategy<T> implements JaxRsStrategy<T> { final int port, final JaxRsClientFactory jaxRsClientFactory, final Class<T> apiClass, - final String pathPrefix) { + final String pathPrefix, + String scheme) { Objects.requireNonNull(hostName, "hostName argument may not be null"); Objects.requireNonNull(jaxRsClientFactory, "jaxRsClientFactory argument may not be null"); Objects.requireNonNull(apiClass, "apiClass argument may not be null"); @@ -35,11 +37,12 @@ public class NoRetryJaxRsStrategy<T> implements JaxRsStrategy<T> { this.jaxRsClientFactory = jaxRsClientFactory; this.apiClass = apiClass; this.pathPrefix = pathPrefix; + this.scheme = scheme; } @Override public <R> R apply(final Function<T, R> function) throws IOException { - final T jaxRsClient = jaxRsClientFactory.createClient(apiClass, hostName, port, pathPrefix); + final T jaxRsClient = jaxRsClientFactory.createClient(apiClass, hostName, port, pathPrefix, scheme); try { return function.apply(jaxRsClient); } catch (ProcessingException e) { diff --git a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/RetryingJaxRsStrategy.java b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/RetryingJaxRsStrategy.java index a73297780c6..73320a4c72d 100644 --- a/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/RetryingJaxRsStrategy.java +++ b/jaxrs_client_utils/src/main/java/com/yahoo/vespa/jaxrs/client/RetryingJaxRsStrategy.java @@ -28,13 +28,15 @@ public class RetryingJaxRsStrategy<T> implements JaxRsStrategy<T> { private final JaxRsClientFactory jaxRsClientFactory; private final Class<T> apiClass; private String pathPrefix; + private final String scheme; public RetryingJaxRsStrategy( final Set<HostName> hostNames, final int port, final JaxRsClientFactory jaxRsClientFactory, final Class<T> apiClass, - final String pathPrefix) { + final String pathPrefix, + String scheme) { if (hostNames.isEmpty()) { throw new IllegalArgumentException("hostNames argument must not be empty"); } @@ -47,6 +49,7 @@ public class RetryingJaxRsStrategy<T> implements JaxRsStrategy<T> { this.jaxRsClientFactory = jaxRsClientFactory; this.apiClass = apiClass; this.pathPrefix = pathPrefix; + this.scheme = scheme; } @Override @@ -55,7 +58,7 @@ public class RetryingJaxRsStrategy<T> implements JaxRsStrategy<T> { for (int i = 0; i < NUM_LOOP_ATTEMPTS; ++i) { for (final HostName hostName : hostNames) { - final T jaxRsClient = jaxRsClientFactory.createClient(apiClass, hostName, port, pathPrefix); + final T jaxRsClient = jaxRsClientFactory.createClient(apiClass, hostName, port, pathPrefix, scheme); try { return function.apply(jaxRsClient); } catch (ProcessingException e) { diff --git a/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/HttpPatchTest.java b/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/HttpPatchTest.java index d50efec261a..63e2b814c24 100644 --- a/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/HttpPatchTest.java +++ b/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/HttpPatchTest.java @@ -70,7 +70,7 @@ public class HttpPatchTest extends JerseyTest { final JaxRsClientFactory jaxRsClientFactory = new JerseyJaxRsClientFactory(); final JaxRsStrategyFactory factory = new JaxRsStrategyFactory( - Collections.singleton(apiHost), apiPort, jaxRsClientFactory); + Collections.singleton(apiHost), apiPort, jaxRsClientFactory, "http"); final JaxRsStrategy<TestResourceApi> client = factory.apiNoRetries(TestResourceApi.class, apiPath); final String responseBody; diff --git a/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/NoRetryJaxRsStrategyTest.java b/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/NoRetryJaxRsStrategyTest.java index 1851ff27270..474df0f3c8d 100644 --- a/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/NoRetryJaxRsStrategyTest.java +++ b/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/NoRetryJaxRsStrategyTest.java @@ -36,11 +36,11 @@ public class NoRetryJaxRsStrategyTest { private final JaxRsClientFactory jaxRsClientFactory = mock(JaxRsClientFactory.class); private final TestJaxRsApi mockApi = mock(TestJaxRsApi.class); private final JaxRsStrategy<TestJaxRsApi> jaxRsStrategy = new NoRetryJaxRsStrategy<>( - SERVER_HOST, REST_PORT, jaxRsClientFactory, TestJaxRsApi.class, API_PATH); + SERVER_HOST, REST_PORT, jaxRsClientFactory, TestJaxRsApi.class, API_PATH, "http"); @Before public void setup() { - when(jaxRsClientFactory.createClient(eq(TestJaxRsApi.class), any(HostName.class), anyInt(), anyString())) + when(jaxRsClientFactory.createClient(eq(TestJaxRsApi.class), any(HostName.class), anyInt(), anyString(), anyString())) .thenReturn(mockApi); } @@ -51,7 +51,7 @@ public class NoRetryJaxRsStrategyTest { verify(mockApi, times(1)).doSomething(); verify(jaxRsClientFactory, times(1)) - .createClient(eq(TestJaxRsApi.class), eq(SERVER_HOST), eq(REST_PORT), eq(API_PATH)); + .createClient(eq(TestJaxRsApi.class), eq(SERVER_HOST), eq(REST_PORT), eq(API_PATH), eq("http")); } @Test diff --git a/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/RetryingJaxRsStrategyTest.java b/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/RetryingJaxRsStrategyTest.java index d3fad2aa8eb..10dde1ff820 100644 --- a/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/RetryingJaxRsStrategyTest.java +++ b/jaxrs_client_utils/src/test/java/com/yahoo/vespa/jaxrs/client/RetryingJaxRsStrategyTest.java @@ -48,11 +48,11 @@ public class RetryingJaxRsStrategyTest { private final JaxRsClientFactory jaxRsClientFactory = mock(JaxRsClientFactory.class); private final TestJaxRsApi mockApi = mock(TestJaxRsApi.class); private final JaxRsStrategy<TestJaxRsApi> jaxRsStrategy = new RetryingJaxRsStrategy<>( - SERVER_HOSTS, REST_PORT, jaxRsClientFactory, TestJaxRsApi.class, API_PATH); + SERVER_HOSTS, REST_PORT, jaxRsClientFactory, TestJaxRsApi.class, API_PATH, "http"); @Before public void setup() { - when(jaxRsClientFactory.createClient(eq(TestJaxRsApi.class), any(HostName.class), anyInt(), anyString())) + when(jaxRsClientFactory.createClient(eq(TestJaxRsApi.class), any(HostName.class), anyInt(), anyString(), anyString())) .thenReturn(mockApi); } @@ -65,7 +65,7 @@ public class RetryingJaxRsStrategyTest { // Check that one of the supplied hosts is contacted. final ArgumentCaptor<HostName> hostNameCaptor = ArgumentCaptor.forClass(HostName.class); verify(jaxRsClientFactory, times(1)) - .createClient(eq(TestJaxRsApi.class), hostNameCaptor.capture(), eq(REST_PORT), eq(API_PATH)); + .createClient(eq(TestJaxRsApi.class), hostNameCaptor.capture(), eq(REST_PORT), eq(API_PATH), eq("http")); assertThat(SERVER_HOSTS.contains(hostNameCaptor.getValue()), is(true)); } @@ -135,7 +135,7 @@ public class RetryingJaxRsStrategyTest { final JaxRsClientFactory jaxRsClientFactory) { final ArgumentCaptor<HostName> hostNameCaptor = ArgumentCaptor.forClass(HostName.class); verify(jaxRsClientFactory, atLeast(SERVER_HOSTS.size())) - .createClient(eq(TestJaxRsApi.class), hostNameCaptor.capture(), eq(REST_PORT), eq(API_PATH)); + .createClient(eq(TestJaxRsApi.class), hostNameCaptor.capture(), eq(REST_PORT), eq(API_PATH), eq("http")); final Set<HostName> actualServerHostsContacted = new HashSet<>(hostNameCaptor.getAllValues()); assertThat(actualServerHostsContacted, equalTo(SERVER_HOSTS)); } |