diff options
author | AndrewLamb <andrew.a.lamb@est.tech> | 2020-05-01 10:47:45 +0100 |
---|---|---|
committer | AndrewLamb <andrew.a.lamb@est.tech> | 2020-05-01 11:07:43 +0100 |
commit | a111f1dbeafb54ca84c34648c85bd4de95604293 (patch) | |
tree | d8e47823a48872de3f72b4055e5321bf49da94ec /adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main | |
parent | 422efab03114830f225fbba0609c773b6536ce27 (diff) |
Fix Parsing Of Etsi Catalog Notifications
Change-Id: I230199ae259e5321bed91aea75f3dd6baf780970
Issue-ID: SO-2825
Signed-off-by: AndrewLamb <andrew.a.lamb@est.tech>
Diffstat (limited to 'adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main')
3 files changed, 58 insertions, 15 deletions
diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/AbstractServiceProviderConfiguration.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/AbstractServiceProviderConfiguration.java index 8f6d853997..2e99658400 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/AbstractServiceProviderConfiguration.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/extclients/AbstractServiceProviderConfiguration.java @@ -20,13 +20,16 @@ package org.onap.so.adapters.vnfmadapter.extclients; +import java.time.LocalDateTime; import com.google.gson.Gson; import java.util.Iterator; -import org.onap.vnfmadapter.v1.JSON; +import org.onap.so.adapters.vnfmadapter.extclients.vnfm.packagemanagement.JSON; +import org.onap.so.adapters.vnfmadapter.rest.EtsiSubscriptionNotificationController; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.GsonHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; +import org.threeten.bp.OffsetDateTime; /** * A base class that can be extended by classes for configuring HttpRestServiceProvider classes. Provides common methods @@ -35,6 +38,7 @@ import org.springframework.web.client.RestTemplate; * @author gareth.roper@est.tech */ public abstract class AbstractServiceProviderConfiguration { + private final JSON.OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new JSON.OffsetDateTimeTypeAdapter(); public void setGsonMessageConverter(final RestTemplate restTemplate) { final Iterator<HttpMessageConverter<?>> iterator = restTemplate.getMessageConverters().iterator(); @@ -43,7 +47,10 @@ public abstract class AbstractServiceProviderConfiguration { iterator.remove(); } } - final Gson gson = new JSON().getGson(); + final Gson gson = JSON.createGson().registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter) + .registerTypeAdapter(LocalDateTime.class, + new EtsiSubscriptionNotificationController.LocalDateTimeTypeAdapter()) + .create(); restTemplate.getMessageConverters().add(new GsonHttpMessageConverter(gson)); } } diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/packagemanagement/subscriptionmanagement/OAuthNotificationServiceProvider.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/packagemanagement/subscriptionmanagement/OAuthNotificationServiceProvider.java index c065203cd8..c30c74daf8 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/packagemanagement/subscriptionmanagement/OAuthNotificationServiceProvider.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/packagemanagement/subscriptionmanagement/OAuthNotificationServiceProvider.java @@ -45,6 +45,7 @@ public class OAuthNotificationServiceProvider extends AbstractNotificationServic public boolean send(final Object notification, final SubscriptionsAuthentication subscriptionsAuthentication, final String callbackUri) { logger.info("Sending notification to uri: {}", callbackUri); + logger.info("Object: {}", notification); final String token = getAccessToken(subscriptionsAuthentication); if (token == null) { diff --git a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/rest/EtsiSubscriptionNotificationController.java b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/rest/EtsiSubscriptionNotificationController.java index a97f04bcc8..92176215bf 100644 --- a/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/rest/EtsiSubscriptionNotificationController.java +++ b/adapters/mso-vnfm-adapter/mso-vnfm-etsi-adapter/src/main/java/org/onap/so/adapters/vnfmadapter/rest/EtsiSubscriptionNotificationController.java @@ -20,11 +20,13 @@ package org.onap.so.adapters.vnfmadapter.rest; -import static org.onap.so.adapters.vnfmadapter.Constants.ETSI_SUBSCRIPTION_NOTIFICATION_CONTROLLER_BASE_URL; -import static org.slf4j.LoggerFactory.getLogger; -import java.util.AbstractMap; -import java.util.Map.Entry; -import javax.ws.rs.core.MediaType; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.notification.model.PkgChangeNotification; import org.onap.so.adapters.vnfmadapter.extclients.etsicatalog.notification.model.PkgOnboardingNotification; import org.onap.so.adapters.vnfmadapter.packagemanagement.subscriptionmanagement.NotificationManager; @@ -38,10 +40,14 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; +import javax.ws.rs.core.MediaType; +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.AbstractMap; +import java.util.Map.Entry; +import static org.onap.so.adapters.vnfmadapter.Constants.ETSI_SUBSCRIPTION_NOTIFICATION_CONTROLLER_BASE_URL; +import static org.slf4j.LoggerFactory.getLogger; /** * This controller handles the ETSI Subscription Notification Endpoints. @@ -61,7 +67,7 @@ public class EtsiSubscriptionNotificationController { @Autowired public EtsiSubscriptionNotificationController(final NotificationManager notificationManager) { this.notificationManager = notificationManager; - this.gson = new GsonBuilder().create(); + this.gson = new GsonBuilder().registerTypeAdapter(LocalDateTime.class, new LocalDateTimeTypeAdapter()).create(); } @GetMapping(value = "/notification") @@ -77,10 +83,11 @@ public class EtsiSubscriptionNotificationController { * @return Response Code: 204 No Content if Successful, ProblemDetails Object if not. */ @PostMapping(value = "/notification", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON) - public ResponseEntity<?> postSubscriptionNotification(@RequestBody final String notification) { - logger.info("Posting subscription notification \n{}", notification); + public ResponseEntity<?> postSubscriptionNotification(@RequestBody final Object notification) { + logger.info("Posting subscription notification class: {} \n{}", notification.getClass(), notification); + final String notificationString = gson.toJson(notification); - final Entry<String, Object> notificationObject = getNotificationObject(notification); + final Entry<String, Object> notificationObject = getNotificationObject(notificationString); if (notificationManager.processSubscriptionNotification(notificationObject.getValue(), notificationObject.getKey())) { logger.info("Notification Delivered Successfully"); @@ -92,6 +99,7 @@ public class EtsiSubscriptionNotificationController { } private Entry<String, Object> getNotificationObject(final String notification) { + logger.info("getNotificationObject() notification: {}", notification); final String notificationType = getNotificationType(notification); if (PkgOnboardingNotification.NotificationTypeEnum.VNFPACKAGEONBOARDINGNOTIFICATION.getValue() .equals(notificationType)) { @@ -118,6 +126,7 @@ public class EtsiSubscriptionNotificationController { private String getNotificationType(final String notification) { try { + logger.info("getNotificationType() notification: {}", notification); final JsonParser parser = new JsonParser(); final JsonObject element = (JsonObject) parser.parse(notification); return element.get("notificationType").getAsString(); @@ -128,4 +137,30 @@ public class EtsiSubscriptionNotificationController { "Unable to parse notification type in object \n" + notification); } + public static class LocalDateTimeTypeAdapter extends TypeAdapter<LocalDateTime> { + + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Override + public void write(final JsonWriter out, final LocalDateTime localDateTime) throws IOException { + if (localDateTime == null) { + out.nullValue(); + } else { + out.value(FORMATTER.format(localDateTime)); + } + } + + @Override + public LocalDateTime read(final JsonReader in) throws IOException { + switch (in.peek()) { + case NULL: + in.nextNull(); + return null; + default: + final String dateTime = in.nextString(); + return LocalDateTime.parse(dateTime, FORMATTER); + } + } + } + } |