From d08d7fea4cf9400b9ba258768a3e2d082d849df2 Mon Sep 17 00:00:00 2001 From: rameshiyer27 Date: Mon, 14 Mar 2022 15:24:25 +0000 Subject: Fix metadataSet serialization for db persistence and retrieval. PDP fails to parse metadataSet from PDP_UPDATE message. MetadataSet(Lob) needs to be serialized and de-serialized for storage/retrieval to preserve the format. Issue-ID: POLICY-3934 Signed-off-by: zrrmmua Change-Id: I5f7a0649639f142c7afb4dd93cc8081ebaac4081 --- .../tosca/simple/concepts/JpaToscaEntityType.java | 28 ++++++++++++++++++++-- .../tosca/simple/concepts/JpaToscaPolicy.java | 12 ++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java index 84381fb50..14c8ca4a3 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaEntityType.java @@ -31,16 +31,20 @@ import javax.persistence.ElementCollection; import javax.persistence.EmbeddedId; import javax.persistence.Lob; import javax.persistence.MappedSuperclass; +import javax.ws.rs.core.Response; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NonNull; import org.apache.commons.lang3.ObjectUtils; import org.onap.policy.common.parameters.annotations.NotBlank; import org.onap.policy.common.parameters.annotations.NotNull; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.models.base.PfAuthorative; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfKey; +import org.onap.policy.models.base.PfModelRuntimeException; import org.onap.policy.models.base.PfUtils; import org.onap.policy.models.base.validation.annotations.VerifyKey; import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; @@ -54,6 +58,8 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaEntity; public class JpaToscaEntityType extends PfConcept implements PfAuthorative { private static final long serialVersionUID = -1330661834220739393L; + private static final StandardCoder STANDARD_CODER = new StandardCoder(); + @EmbeddedId @VerifyKey @NotNull @@ -128,7 +134,7 @@ public class JpaToscaEntityType extends PfConcept impleme toscaEntity.setDescription(description); } - toscaEntity.setMetadata(PfUtils.mapMap(metadata, item -> item)); + toscaEntity.setMetadata(PfUtils.mapMap(metadata, this::deserializeMetadataValue)); return toscaEntity; } @@ -158,7 +164,7 @@ public class JpaToscaEntityType extends PfConcept impleme description = toscaEntity.getDescription(); } - metadata = PfUtils.mapMap(toscaEntity.getMetadata(), Object::toString); + metadata = PfUtils.mapMap(toscaEntity.getMetadata(), this::serializeMetadataValue); } @Override @@ -219,4 +225,22 @@ public class JpaToscaEntityType extends PfConcept impleme return ObjectUtils.compare(description, other.description); } + + protected Object deserializeMetadataValue(String metadataValue) { + try { + return STANDARD_CODER.decode(metadataValue, Object.class); + } catch (CoderException ce) { + String errorMessage = "error decoding metadata JSON value read from database: " + metadataValue; + throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, ce); + } + } + + protected String serializeMetadataValue(Object metadataValue) { + try { + return STANDARD_CODER.encode(metadataValue); + } catch (CoderException ce) { + String errorMessage = "error encoding metadata JSON value for database: " + metadataValue; + throw new PfModelRuntimeException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, ce); + } + } } diff --git a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java index feae48e1a..92e0faea6 100644 --- a/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java +++ b/models-tosca/src/main/java/org/onap/policy/models/tosca/simple/concepts/JpaToscaPolicy.java @@ -62,6 +62,8 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy; @EqualsAndHashCode(callSuper = true) public class JpaToscaPolicy extends JpaToscaWithTypeAndStringProperties { private static final long serialVersionUID = 3265174757061982805L; + private static final String METADATA_METADATA_SET_NAME_TAG = "metadataSetName"; + private static final String METADATA_METADATA_SET_VERSION_TAG = "metadataSetVersion"; // Tags for metadata private static final String METADATA_POLICY_ID_TAG = "policy-id"; @@ -143,6 +145,16 @@ public class JpaToscaPolicy extends JpaToscaWithTypeAndStringProperties