From c385126fcd5008a6ed5d2a2cab1cb29304b5bed0 Mon Sep 17 00:00:00 2001 From: Andrea Campanella Date: Wed, 8 Jun 2016 12:27:11 +0200 Subject: [PATCH] Adding post method with String return type Change-Id: I4483ad2494ccaca08f7460de212e432d46cba710 --- .../protocol/rest/RestSBController.java | 14 +++++++++++++ .../rest/ctl/RestSBControllerImpl.java | 21 ++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/RestSBController.java b/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/RestSBController.java index b25915b1d2..ed79fd9dfc 100644 --- a/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/RestSBController.java +++ b/protocols/rest/api/src/main/java/org/onosproject/protocol/rest/RestSBController.java @@ -77,6 +77,20 @@ public interface RestSBController { */ boolean post(DeviceId device, String request, InputStream payload, String mediaType); + /** + * Does a REST POST request with specified parameters to the device. + * + * @param device device to make the request to + * @param request url of the request + * @param payload payload of the request as an InputStream + * @param mediaType type of content in the payload i.e. application/json + * @param responseClass the type of response object we are interested in, + * such as String, InputStream. + * @return Object of type requested via responseClass. + */ + T post(DeviceId device, String request, InputStream payload, + String mediaType, Class responseClass); + /** * Does a REST PUT request with specified parameters to the device. * diff --git a/protocols/rest/ctl/src/main/java/org/onosproject/protocol/rest/ctl/RestSBControllerImpl.java b/protocols/rest/ctl/src/main/java/org/onosproject/protocol/rest/ctl/RestSBControllerImpl.java index 424914f989..47372cd79a 100644 --- a/protocols/rest/ctl/src/main/java/org/onosproject/protocol/rest/ctl/RestSBControllerImpl.java +++ b/protocols/rest/ctl/src/main/java/org/onosproject/protocol/rest/ctl/RestSBControllerImpl.java @@ -134,6 +134,22 @@ public class RestSBControllerImpl implements RestSBController { @Override public boolean post(DeviceId device, String request, InputStream payload, String mediaType) { + Response response = getResponse(device, request, payload, mediaType); + return checkReply(response); + } + + @Override + public T post(DeviceId device, String request, InputStream payload, + String mediaType, Class responseClass) { + Response response = getResponse(device, request, payload, mediaType); + if (response.hasEntity()) { + return response.readEntity(responseClass); + } + log.error("Response from device {} for request {} contains no entity", device, request); + return null; + } + + private Response getResponse(DeviceId device, String request, InputStream payload, String mediaType) { WebTarget wt = getWebTarget(device, request); Response response = null; @@ -148,7 +164,7 @@ public class RestSBControllerImpl implements RestSBController { } else { response = wt.request(mediaType).post(Entity.entity(null, mediaType)); } - return checkReply(response); + return response; } @Override @@ -189,7 +205,7 @@ public class RestSBControllerImpl implements RestSBController { Response s = wt.request(type).get(); if (checkReply(s)) { return new ByteArrayInputStream(wt.request(type) - .get(String.class).getBytes(StandardCharsets.UTF_8)); + .get(String.class).getBytes(StandardCharsets.UTF_8)); } return null; } @@ -305,7 +321,6 @@ public class RestSBControllerImpl implements RestSBController { public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } - } }, new java.security.SecureRandom()); } catch (NoSuchAlgorithmException | KeyManagementException e) { e.printStackTrace();