diff --git a/tests/integration/webclient/src/test/java/io/helidon/tests/integration/webclient/TracingPropagationTest.java b/tests/integration/webclient/src/test/java/io/helidon/tests/integration/webclient/TracingPropagationTest.java index 56469a43ac0..499bf2fb41b 100644 --- a/tests/integration/webclient/src/test/java/io/helidon/tests/integration/webclient/TracingPropagationTest.java +++ b/tests/integration/webclient/src/test/java/io/helidon/tests/integration/webclient/TracingPropagationTest.java @@ -81,7 +81,7 @@ void testTracingSuccess() throws ExecutionException, InterruptedException { assertThat(wsSpan.operationName(), is("HTTP Request")); tags = wsSpan.tags(); assertThat(tags.get(Tags.HTTP_METHOD.getKey()), is("GET")); - assertThat(tags.get(Tags.HTTP_URL.getKey()), is(uri)); + assertThat(tags.get(Tags.HTTP_URL.getKey()), is("/greet")); assertThat(tags.get(Tags.HTTP_STATUS.getKey()), is(200)); assertThat(tags.get(Tags.COMPONENT.getKey()), is("helidon-webserver")); diff --git a/webclient/webclient/src/main/java/io/helidon/webclient/WebClientRequestBuilderImpl.java b/webclient/webclient/src/main/java/io/helidon/webclient/WebClientRequestBuilderImpl.java index e6a08379b84..7ebdaba77d8 100644 --- a/webclient/webclient/src/main/java/io/helidon/webclient/WebClientRequestBuilderImpl.java +++ b/webclient/webclient/src/main/java/io/helidon/webclient/WebClientRequestBuilderImpl.java @@ -494,6 +494,8 @@ private Single invokeWithEntity(Flow.Publisher requestEntity, private Single invoke(Flow.Publisher requestEntity) { this.uri = prepareFinalURI(); + //Relative URI is used in request if no proxy set + URI requestURI = proxy == Proxy.noProxy() ? prepareRelativeURI() : uri; if (requestId == null) { requestId = REQUEST_NUMBER.incrementAndGet(); } @@ -519,7 +521,7 @@ private Single invoke(Flow.Publisher requestEntity HttpHeaders headers = toNettyHttpHeaders(); DefaultHttpRequest request = new DefaultHttpRequest(toNettyHttpVersion(httpVersion), toNettyMethod(method), - uri.toASCIIString(), + requestURI.toASCIIString(), headers); HttpUtil.isKeepAlive(request); @@ -631,6 +633,29 @@ private URI prepareFinalURI() { return this.uri; } + private URI prepareRelativeURI() { + try { + String path = this.path.toString(); + String query = this.uri.getQuery(); + String fragment = this.uri.getFragment(); + if (skipUriEncoding) { + StringBuilder sb = new StringBuilder(); + sb.append(path); + if (query != null) { + sb.append('?'); + sb.append(query); + } else if (fragment != null) { + sb.append('#'); + sb.append(fragment); + } + return URI.create(sb.toString()); + } + return new URI(null, null, null, -1, path, query, fragment); + } catch (URISyntaxException e) { + throw new WebClientException("Could not create URI instance for the request.", e); + } + } + private String resolveQuery() { String queries = ""; for (Map.Entry> entry : queryParams.toMap().entrySet()) {