aboutsummaryrefslogtreecommitdiffstats
path: root/rest-services/common-dependency/src/main
diff options
context:
space:
mode:
authorPiotr Jaszczyk <piotr.jaszczyk@nokia.com>2019-05-08 14:52:24 +0200
committerPiotr Jaszczyk <piotr.jaszczyk@nokia.com>2019-05-09 13:54:07 +0200
commitb1e0ceb789a9c0781bb3b97d4b1ff0e75396fd29 (patch)
tree15b194d7558dc6ced78d0977beffa81bc430001f /rest-services/common-dependency/src/main
parent9c13ba3e6a41f64d1bad23ccd9a876bee615297d (diff)
Release DMaaP client API
* remove @ExperimentalApi annotation * deprecate old API * extract http-client module + refactor * change DmaapClientFactory so it's more configurable Change-Id: I710d20558eece8cc3d7c0740e765d34737134b3a Issue-ID: DCAEGEN2-1492 Signed-off-by: Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
Diffstat (limited to 'rest-services/common-dependency/src/main')
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/CloudHttpClient.java141
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpHeaders.java34
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpMethod.java48
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpRequest.java59
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpResponse.java77
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/NettyHttpResponse.java73
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/RequestBody.java77
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/RxHttpClient.java123
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/exceptions/HttpException.java45
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/test/DummyHttpServer.java88
-rw-r--r--rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/model/logging/RequestDiagnosticContext.java6
11 files changed, 6 insertions, 765 deletions
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/CloudHttpClient.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/CloudHttpClient.java
deleted file mode 100644
index 7b87511b..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/CloudHttpClient.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http;
-
-import com.google.gson.Gson;
-import io.netty.handler.ssl.SslContext;
-import io.vavr.collection.HashMap;
-import java.util.Collections;
-import java.util.Map;
-import org.onap.dcaegen2.services.sdk.rest.services.model.ClientModel;
-import org.onap.dcaegen2.services.sdk.rest.services.model.JsonBodyBuilder;
-import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import reactor.core.publisher.Mono;
-
-/**
- * @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 11/15/18
- * @deprecated use {@link RxHttpClient} instead
- */
-@Deprecated
-public class CloudHttpClient {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(CloudHttpClient.class);
- private final Gson gson = new Gson();
- private final RxHttpClient httpClient;
-
- CloudHttpClient(RxHttpClient httpClient) {
- this.httpClient = httpClient;
- }
-
- public CloudHttpClient() {
- this(RxHttpClient.create());
- }
-
- public CloudHttpClient(SslContext sslContext) {
- this(RxHttpClient.create(sslContext));
- }
-
- public <T> Mono<T> get(String url, Class<T> bodyClass) {
- return get(url, RequestDiagnosticContext.create(), bodyClass);
- }
-
- public <T> Mono<T> get(String url, RequestDiagnosticContext context, Class<T> bodyClass) {
- return get(url, context, Collections.emptyMap(), bodyClass);
- }
-
- public Mono<HttpResponse> get(
- String url,
- RequestDiagnosticContext context,
- Map<String, String> customHeaders) {
- return httpClient.call(
- ImmutableHttpRequest.builder()
- .method(HttpMethod.GET)
- .url(url)
- .customHeaders(HashMap.ofAll(customHeaders))
- .diagnosticContext(context)
- .build());
- }
-
- public <T> Mono<T> get(
- String url,
- RequestDiagnosticContext context,
- Map<String, String> customHeaders,
- Class<T> bodyClass) {
- return get(url, context, customHeaders)
- .doOnNext(HttpResponse::throwIfUnsuccessful)
- .map(HttpResponse::bodyAsString)
- .map(body -> gson.fromJson(body, bodyClass));
- }
-
-
- public Mono<HttpResponse> post(
- String url,
- RequestDiagnosticContext context,
- Map<String, String> customHeaders,
- JsonBodyBuilder jsonBodyBuilder,
- ClientModel clientModel) {
- return callForRawResponse(url, context, customHeaders, jsonBodyBuilder, clientModel, HttpMethod.POST);
- }
-
- public Mono<HttpResponse> patch(
- String url,
- RequestDiagnosticContext context,
- Map<String, String> customHeaders,
- JsonBodyBuilder jsonBodyBuilder,
- ClientModel clientModel) {
- return callForRawResponse(url, context, customHeaders, jsonBodyBuilder, clientModel, HttpMethod.PATCH);
- }
-
- public Mono<HttpResponse> put(
- String url,
- RequestDiagnosticContext context,
- Map<String, String> customHeaders,
- JsonBodyBuilder jsonBodyBuilder,
- ClientModel clientModel) {
- return callForRawResponse(url, context, customHeaders, jsonBodyBuilder, clientModel, HttpMethod.PUT);
- }
-
- private Mono<HttpResponse> callForRawResponse(
- String url,
- RequestDiagnosticContext context,
- Map<String, String> customHeaders,
- JsonBodyBuilder jsonBodyBuilder,
- ClientModel clientModel,
- HttpMethod method) {
-
- String jsonBody = jsonBodyBuilder.createJsonBody(clientModel);
- LOGGER.debug("CloudHttpClient JSon body:: {}", jsonBody);
- LOGGER.debug("CloudHttpClient url: {}", url);
- LOGGER.debug("CloudHttpClient customHeaders: {}", customHeaders);
-
- return httpClient.call(
- ImmutableHttpRequest.builder()
- .url(url)
- .customHeaders(HashMap.ofAll(customHeaders))
- .diagnosticContext(context)
- .body(RequestBody.fromString(jsonBody))
- .method(method)
- .build());
- }
-}
-
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpHeaders.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpHeaders.java
deleted file mode 100644
index 4ef43a59..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpHeaders.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http;
-
-/**
- * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
- * @since April 2019
- */
-public final class HttpHeaders {
-
- private HttpHeaders() {
- }
-
- public static final String CONTENT_TYPE = "Content-Type";
- public static final String CONTENT_LENGTH = "Content-Length";
-}
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpMethod.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpMethod.java
deleted file mode 100644
index 78e6789e..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpMethod.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http;
-
-/**
- * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
- * @since March 2019
- */
-public enum HttpMethod {
-
- CONNECT(io.netty.handler.codec.http.HttpMethod.CONNECT),
- DELETE(io.netty.handler.codec.http.HttpMethod.DELETE),
- GET(io.netty.handler.codec.http.HttpMethod.GET),
- HEAD(io.netty.handler.codec.http.HttpMethod.HEAD),
- OPTIONS(io.netty.handler.codec.http.HttpMethod.OPTIONS),
- POST(io.netty.handler.codec.http.HttpMethod.POST),
- PATCH(io.netty.handler.codec.http.HttpMethod.PATCH),
- PUT(io.netty.handler.codec.http.HttpMethod.PUT),
- TRACE(io.netty.handler.codec.http.HttpMethod.TRACE);
-
- private final io.netty.handler.codec.http.HttpMethod nettyMethod;
-
- HttpMethod(io.netty.handler.codec.http.HttpMethod nettyMethod) {
- this.nettyMethod = nettyMethod;
- }
-
- io.netty.handler.codec.http.HttpMethod asNetty() {
- return nettyMethod;
- }
-}
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpRequest.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpRequest.java
deleted file mode 100644
index 33060c9f..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpRequest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http;
-
-import io.vavr.collection.HashMap;
-import io.vavr.collection.Map;
-import org.immutables.value.Value;
-import org.jetbrains.annotations.Nullable;
-import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
-
-/**
- * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
- * @since March 2019
- */
-@Value.Immutable
-public interface HttpRequest {
-
- String url();
-
- HttpMethod method();
-
- @Nullable RequestBody body();
-
- @Value.Default
- default RequestDiagnosticContext diagnosticContext() {
- return RequestDiagnosticContext.create();
- }
-
- @Value.Default
- default Map<String, String> customHeaders() {
- return HashMap.empty();
- }
-
- @Value.Derived
- default Map<String, String> headers() {
- final RequestDiagnosticContext ctx = diagnosticContext();
- return ctx == null
- ? customHeaders()
- : customHeaders().merge(ctx.remoteCallHttpHeaders());
- }
-}
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpResponse.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpResponse.java
deleted file mode 100644
index ce100478..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/HttpResponse.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http;
-
-import com.google.gson.Gson;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import org.immutables.value.Value;
-import org.onap.dcaegen2.services.sdk.rest.services.adapters.http.exceptions.HttpException;
-
-/**
- * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
- * @since March 2019
- */
-@Value.Immutable
-public interface HttpResponse {
-
- String url();
-
- int statusCode();
-
- byte[] rawBody();
-
- @Value.Default
- default String statusReason() {
- return "";
- }
-
- @Value.Derived
- default boolean successful() {
- return statusCode() >= 200 && statusCode() < 300;
- }
-
- @Value.Derived
- default String bodyAsString() {
- return bodyAsString(StandardCharsets.UTF_8);
- }
-
- @Value.Derived
- default String bodyAsString(Charset charset) {
- return new String(rawBody(), charset);
- }
-
- @Value.Derived
- default <T> T bodyAsJson(Class<T> clazz) {
- return bodyAsJson(StandardCharsets.UTF_8, new Gson(), clazz);
- }
-
- @Value.Derived
- default <T> T bodyAsJson(Charset charset, Gson gson, Class<T> clazz) {
- return gson.fromJson(bodyAsString(charset), clazz);
- }
-
- default void throwIfUnsuccessful() {
- if (!successful()) {
- throw new HttpException(url(), statusCode(), statusReason());
- }
- }
-}
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/NettyHttpResponse.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/NettyHttpResponse.java
deleted file mode 100644
index 3dcd7098..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/NettyHttpResponse.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http;
-
-import io.netty.handler.codec.http.HttpResponseStatus;
-import io.netty.handler.codec.http.HttpStatusClass;
-import java.nio.charset.Charset;
-
-/**
- * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
- * @since March 2019
- */
-class NettyHttpResponse implements HttpResponse {
-
- private final String url;
- private final HttpResponseStatus status;
- private final byte[] body;
-
- NettyHttpResponse(String url, HttpResponseStatus status, byte[] body) {
- this.url = url;
- this.status = status;
- this.body = body;
- }
-
- @Override
- public String url() {
- return url;
- }
-
- @Override
- public boolean successful() {
- return status.codeClass() == HttpStatusClass.SUCCESS;
- }
-
- @Override
- public int statusCode() {
- return status.code();
- }
-
- @Override
- public String statusReason() {
- return status.reasonPhrase();
- }
-
- @Override
- public byte[] rawBody() {
- return new byte[0];
- }
-
- @Override
- public String bodyAsString(Charset charset) {
- return new String(body, charset);
- }
-
-}
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/RequestBody.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/RequestBody.java
deleted file mode 100644
index ed218887..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/RequestBody.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http;
-
-import com.google.gson.JsonElement;
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.ByteBufAllocator;
-import io.netty.buffer.Unpooled;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import org.immutables.value.Value;
-import org.jetbrains.annotations.Nullable;
-import org.reactivestreams.Publisher;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-import reactor.netty.ByteBufFlux;
-
-/**
- * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
- * @since March 2019
- */
-@Value.Immutable
-public interface RequestBody {
-
- Publisher<ByteBuf> contents();
-
- @Nullable Integer length();
-
- static RequestBody chunkedFromString(Publisher<String> contents) {
- return chunkedFromString(contents, StandardCharsets.UTF_8);
- }
-
- static RequestBody chunkedFromString(Publisher<String> contents, Charset charset) {
- return ImmutableRequestBody.builder()
- .length(null)
- .contents(ByteBufFlux.fromString(contents, charset, ByteBufAllocator.DEFAULT))
- .build();
- }
-
- static RequestBody fromString(String contents) {
- return fromString(contents, StandardCharsets.UTF_8);
- }
-
- static RequestBody fromString(String contents, Charset charset) {
- ByteBuf encodedContents = ByteBufAllocator.DEFAULT.buffer();
- encodedContents.writeCharSequence(contents, charset);
-
- return ImmutableRequestBody.builder()
- .length(encodedContents.readableBytes())
- .contents(Mono.just(encodedContents.retain()))
- .build();
- }
-
- static RequestBody fromJson(JsonElement contents) {
- return fromString(contents.toString());
- }
-
-}
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/RxHttpClient.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/RxHttpClient.java
deleted file mode 100644
index 3c010ef2..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/RxHttpClient.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http;
-
-import io.netty.handler.ssl.SslContext;
-import io.vavr.collection.Stream;
-import java.util.stream.Collectors;
-import org.jetbrains.annotations.NotNull;
-import org.onap.dcaegen2.services.sdk.rest.services.model.logging.RequestDiagnosticContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import reactor.core.publisher.Mono;
-import reactor.netty.http.client.HttpClient;
-import reactor.netty.http.client.HttpClient.ResponseReceiver;
-import reactor.netty.http.client.HttpClientRequest;
-import reactor.netty.http.client.HttpClientResponse;
-
-/**
- * @since 1.1.4
- */
-public class RxHttpClient {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(RxHttpClient.class);
- private final HttpClient httpClient;
-
- public static RxHttpClient create() {
- return new RxHttpClient(HttpClient.create());
- }
-
- // TODO: hide netty from public api (io.netty.handler.ssl.SslContext)
- public static RxHttpClient create(@NotNull
- SslContext sslContext) {
- return new RxHttpClient(HttpClient.create().secure(sslContextSpec -> sslContextSpec.sslContext(sslContext)));
- }
-
- RxHttpClient(HttpClient httpClient) {
- this.httpClient = httpClient;
- }
-
- public Mono<HttpResponse> call(HttpRequest request) {
- return prepareRequest(request)
- .responseSingle((resp, content) ->
- content.asByteArray()
- .defaultIfEmpty(new byte[0])
- .map(bytes -> new NettyHttpResponse(request.url(), resp.status(), bytes)));
- }
-
- ResponseReceiver<?> prepareRequest(HttpRequest request) {
- final HttpClient theClient = httpClient
- .doOnRequest((req, conn) -> logRequest(request.diagnosticContext(), req))
- .doOnResponse((rsp, conn) -> logResponse(request.diagnosticContext(), rsp))
- .headers(hdrs -> request.headers().forEach(hdr -> hdrs.set(hdr._1, hdr._2)));
-
- return prepareBody(request, theClient);
- }
-
- private ResponseReceiver<?> prepareBody(HttpRequest request, HttpClient theClient) {
- if (request.body() == null) {
- return prepareBodyWithoutContents(request, theClient);
- } else {
- return request.body().length() == null
- ? prepareBodyChunked(request, theClient)
- : prepareBodyUnchunked(request, theClient);
- }
- }
-
- private ResponseReceiver<?> prepareBodyChunked(HttpRequest request, HttpClient theClient) {
- return theClient
- .chunkedTransfer(true)
- .request(request.method().asNetty())
- .send(request.body().contents())
- .uri(request.url());
- }
-
- private ResponseReceiver<?> prepareBodyUnchunked(HttpRequest request, HttpClient theClient) {
- return theClient
- .headers(hdrs -> hdrs.set(HttpHeaders.CONTENT_LENGTH, request.body().length().toString()))
- .request(request.method().asNetty())
- .send(request.body().contents())
- .uri(request.url());
- }
-
- private ResponseReceiver<?> prepareBodyWithoutContents(HttpRequest request, HttpClient theClient) {
- return theClient
- .request(request.method().asNetty())
- .uri(request.url());
- }
-
- private void logRequest(RequestDiagnosticContext context, HttpClientRequest httpClientRequest) {
- context.withSlf4jMdc(LOGGER.isDebugEnabled(), () -> {
- LOGGER.debug("Request: {} {} {}", httpClientRequest.method(), httpClientRequest.uri(),
- httpClientRequest.requestHeaders());
- if (LOGGER.isTraceEnabled()) {
- final String headers = Stream.ofAll(httpClientRequest.requestHeaders())
- .map(entry -> entry.getKey() + "=" + entry.getValue())
- .collect(Collectors.joining("\n"));
- LOGGER.trace(headers);
- }
- });
- }
-
- private void logResponse(RequestDiagnosticContext context, HttpClientResponse httpClientResponse) {
- context.withSlf4jMdc(LOGGER.isDebugEnabled(),
- () -> LOGGER.debug("Response status: {}", httpClientResponse.status()));
- }
-}
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/exceptions/HttpException.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/exceptions/HttpException.java
deleted file mode 100644
index 9631f4c5..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/exceptions/HttpException.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http.exceptions;
-
-/**
- * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
- * @since March 2019
- */
-public class HttpException extends RuntimeException {
-
- private final String url;
- private final int responseCode;
- private final String reason;
-
- public HttpException(String url, int responseCode, String reason) {
- this.url = url;
- this.responseCode = responseCode;
- this.reason = reason;
- }
-
- @Override
- public String getMessage() {
- return String.format("Request failed for URL '%s'. Response code: %d %s",
- url,
- responseCode,
- reason);
- }
-}
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/test/DummyHttpServer.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/test/DummyHttpServer.java
deleted file mode 100644
index e565c786..00000000
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/adapters/http/test/DummyHttpServer.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * ============LICENSE_START====================================
- * DCAEGEN2-SERVICES-SDK
- * =========================================================
- * Copyright (C) 2019 Nokia. All rights reserved.
- * =========================================================
- * 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.
- * ============LICENSE_END=====================================
- */
-
-package org.onap.dcaegen2.services.sdk.rest.services.adapters.http.test;
-
-import io.vavr.CheckedFunction0;
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.function.Consumer;
-import org.reactivestreams.Publisher;
-import reactor.core.publisher.Mono;
-import reactor.netty.DisposableServer;
-import reactor.netty.http.server.HttpServer;
-import reactor.netty.http.server.HttpServerResponse;
-import reactor.netty.http.server.HttpServerRoutes;
-
-/**
- * @author <a href="mailto:piotr.jaszczyk@nokia.com">Piotr Jaszczyk</a>
- * @since February 2019
- */
-public class DummyHttpServer {
-
- private final DisposableServer server;
-
- private DummyHttpServer(DisposableServer server) {
- this.server = server;
- }
-
- public static DummyHttpServer start(Consumer<HttpServerRoutes> routes) {
- return new DummyHttpServer(HttpServer.create()
- .host("127.0.0.1")
- .route(routes)
- .bind()
- .block());
- }
-
- public static Publisher<Void> sendResource(HttpServerResponse httpServerResponse, String resourcePath) {
- return sendString(httpServerResponse, Mono.fromCallable(() -> readResource(resourcePath)));
- }
-
- public static Publisher<Void> sendString(HttpServerResponse httpServerResponse, Publisher<String> content) {
- return httpServerResponse.sendString(content);
- }
-
- public void close() {
- server.disposeNow();
- }
-
- public String host() {
- return server.host();
- }
-
- public int port() {
- return server.port();
- }
-
- private static String readResource(String resourcePath) {
- try {
- return CheckedFunction0.constant(resourcePath)
- .andThen(DummyHttpServer.class::getResource)
- .andThen(URL::toURI)
- .andThen(Paths::get)
- .andThen(Files::readAllBytes)
- .andThen(String::new)
- .apply();
- } catch (Throwable throwable) {
- throw new RuntimeException(throwable);
- }
- }
-}
diff --git a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/model/logging/RequestDiagnosticContext.java b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/model/logging/RequestDiagnosticContext.java
index 97269064..0c4a4b1f 100644
--- a/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/model/logging/RequestDiagnosticContext.java
+++ b/rest-services/common-dependency/src/main/java/org/onap/dcaegen2/services/sdk/rest/services/model/logging/RequestDiagnosticContext.java
@@ -24,6 +24,7 @@ import io.vavr.collection.HashMap;
import io.vavr.collection.Map;
import java.util.UUID;
import org.immutables.value.Value;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.MDC;
@@ -91,6 +92,11 @@ public interface RequestDiagnosticContext {
}
}
+ default @NotNull RequestDiagnosticContext withNewInvocationId() {
+ return ImmutableRequestDiagnosticContext.copyOf(this)
+ .withInvocationId(UUID.randomUUID());
+ }
+
static ImmutableRequestDiagnosticContext create() {
return ImmutableRequestDiagnosticContext.builder()
.requestId(UUID.randomUUID())