From bfd3c5bf6e2c70caf62dc98ca6d69a9b6586825b Mon Sep 17 00:00:00 2001 From: RehanRaza Date: Fri, 13 Dec 2019 17:05:11 +0100 Subject: [PATCH] Add Error Handling in A1 Client Change-Id: I7e24241b84f123ecffdcfe880e43935f5d8e933b Issue-ID: NONRTRIC-80 Signed-off-by: RehanRaza --- .../org/oransc/policyagent/clients/A1Client.java | 56 ++++++++++++++-------- .../policyagent/clients/AsyncRestClient.java | 8 ++++ .../exceptions/AsyncRestClientException.java | 30 ++++++++++++ 3 files changed, 74 insertions(+), 20 deletions(-) create mode 100644 policy-agent/src/main/java/org/oransc/policyagent/exceptions/AsyncRestClientException.java diff --git a/policy-agent/src/main/java/org/oransc/policyagent/clients/A1Client.java b/policy-agent/src/main/java/org/oransc/policyagent/clients/A1Client.java index 39fbc37b..db048fb3 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/clients/A1Client.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/clients/A1Client.java @@ -22,12 +22,11 @@ package org.oransc.policyagent.clients; import java.lang.invoke.MethodHandles; import java.util.ArrayList; import java.util.List; - import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -62,6 +61,11 @@ public class A1Client { public Mono putPolicy(String nearRtRicUrl, String policyId, String policyString) { logger.debug("putPolicy nearRtRicUrl = {}, policyId = {}, policyString = {}", nearRtRicUrl, policyId, policyString); + try { + new JSONObject(policyString); + } catch (JSONException ex) { // invalid json + return Mono.error(ex); + } AsyncRestClient client = new AsyncRestClient(getBaseUrl(nearRtRicUrl)); Mono response = client.put("/policies/" + policyId, policyString); return response.flatMap(this::createPolicyMono); @@ -74,32 +78,44 @@ public class A1Client { } private Flux createPolicyTypesFlux(String policyTypesString) { - List policyTypesList = new ArrayList<>(); - JSONArray policyTypesArray = new JSONArray(policyTypesString); - for (int i = 0; i < policyTypesArray.length(); i++) { - policyTypesList.add(policyTypesArray.getJSONObject(i).toString()); + try { + List policyTypesList = new ArrayList<>(); + JSONArray policyTypesArray = new JSONArray(policyTypesString); + for (int i = 0; i < policyTypesArray.length(); i++) { + policyTypesList.add(policyTypesArray.getJSONObject(i).toString()); + } + logger.debug("A1 client: policyTypes = {}", policyTypesList); + return Flux.fromIterable(policyTypesList); + } catch (JSONException ex) { // invalid json + return Flux.error(ex); } - logger.debug("A1 client: policyTypes = {}", policyTypesList); - return Flux.fromIterable(policyTypesList); } private Flux createPoliciesFlux(String policiesString, String policyTypeId) { - List policiesList = new ArrayList<>(); - JSONArray policiesArray = new JSONArray(policiesString); - for (int i = 0; i < policiesArray.length(); i++) { - JSONObject policyObject = policiesArray.getJSONObject(i); - if (policyObject.get("policyTypeId").equals(policyTypeId)) { - policiesList.add(policyObject.toString()); + try { + List policiesList = new ArrayList<>(); + JSONArray policiesArray = new JSONArray(policiesString); + for (int i = 0; i < policiesArray.length(); i++) { + JSONObject policyObject = policiesArray.getJSONObject(i); + if (policyObject.get("policyTypeId").equals(policyTypeId)) { + policiesList.add(policyObject.toString()); + } } + logger.debug("A1 client: policies = {}", policiesList); + return Flux.fromIterable(policiesList); + } catch (JSONException ex) { // invalid json + return Flux.error(ex); } - logger.debug("A1 client: policies = {}", policiesList); - return Flux.fromIterable(policiesList); } private Mono createPolicyMono(String policyString) { - // remove white-spaces - policyString = policyString.replaceAll("\\s+", ""); - logger.debug("A1 client: policy = {}", policyString); - return Mono.just(policyString); + try { + JSONObject policyObject = new JSONObject(policyString); + String policy = policyObject.toString(); + logger.debug("A1 client: policy = {}", policy); + return Mono.just(policy); + } catch (JSONException ex) { // invalid json + return Mono.error(ex); + } } } diff --git a/policy-agent/src/main/java/org/oransc/policyagent/clients/AsyncRestClient.java b/policy-agent/src/main/java/org/oransc/policyagent/clients/AsyncRestClient.java index c69afb2f..2e6df942 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/clients/AsyncRestClient.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/clients/AsyncRestClient.java @@ -19,6 +19,8 @@ */ package org.oransc.policyagent.clients; +import org.oransc.policyagent.exceptions.AsyncRestClientException; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; @@ -36,6 +38,8 @@ public class AsyncRestClient { .contentType(MediaType.APPLICATION_JSON) // .syncBody(body) // .retrieve() // + .onStatus(HttpStatus::isError, + response -> Mono.error(new AsyncRestClientException(response.statusCode().toString()))) // .bodyToMono(String.class); } @@ -43,6 +47,8 @@ public class AsyncRestClient { return client.get() // .uri(uri) // .retrieve() // + .onStatus(HttpStatus::isError, + response -> Mono.error(new AsyncRestClientException(response.statusCode().toString()))) // .bodyToMono(String.class); } @@ -50,6 +56,8 @@ public class AsyncRestClient { return client.delete() // .uri(uri) // .retrieve() // + .onStatus(HttpStatus::isError, + response -> Mono.error(new AsyncRestClientException(response.statusCode().toString()))) // .bodyToMono(Void.class); } } diff --git a/policy-agent/src/main/java/org/oransc/policyagent/exceptions/AsyncRestClientException.java b/policy-agent/src/main/java/org/oransc/policyagent/exceptions/AsyncRestClientException.java new file mode 100644 index 00000000..b5a6df36 --- /dev/null +++ b/policy-agent/src/main/java/org/oransc/policyagent/exceptions/AsyncRestClientException.java @@ -0,0 +1,30 @@ +/*- + * ========================LICENSE_START================================= + * O-RAN-SC + * %% + * Copyright (C) 2019 Nordix 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. + * ========================LICENSE_END=================================== + */ + +package org.oransc.policyagent.exceptions; + +public class AsyncRestClientException extends Exception { + + private static final long serialVersionUID = 1L; + + public AsyncRestClientException(String message) { + super(message); + } +} -- 2.16.6