Make Introspector serializable via Jackson 23/139123/2
authorFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Sat, 5 Oct 2024 19:17:10 +0000 (21:17 +0200)
committerFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Sat, 5 Oct 2024 19:36:42 +0000 (21:36 +0200)
- annotate Introspector, such that ObjectMapper can serialize it

Issue-ID: AAI-4010
Signed-off-by: Fiete Ostkamp <Fiete.Ostkamp@telekom.de>
Change-Id: I4896f811fa9db0637c941a11b01f26b734b15a21

aai-core/src/main/java/org/onap/aai/introspection/Introspector.java
aai-core/src/test/java/org/onap/aai/introspection/IntrospectorSerializationTest.java [new file with mode: 0644]

index 87983d8..cde99db 100644 (file)
@@ -20,6 +20,8 @@
 
 package org.onap.aai.introspection;
 
+import com.fasterxml.jackson.annotation.JsonRawValue;
+import com.fasterxml.jackson.annotation.JsonValue;
 import com.google.common.base.CaseFormat;
 
 import java.io.UnsupportedEncodingException;
@@ -620,6 +622,12 @@ public abstract class Introspector implements Cloneable {
         return marshal(properties);
     }
 
+    @JsonValue
+    @JsonRawValue
+    public String toString() {
+        return marshal(false);
+    }
+
     public String makeSingular(String word) {
 
         String result = word;
diff --git a/aai-core/src/test/java/org/onap/aai/introspection/IntrospectorSerializationTest.java b/aai-core/src/test/java/org/onap/aai/introspection/IntrospectorSerializationTest.java
new file mode 100644 (file)
index 0000000..51eb0ce
--- /dev/null
@@ -0,0 +1,58 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2024 Deutsche Telekom. 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.aai.introspection;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.aai.AAISetup;
+import org.onap.aai.exceptions.AAIException;
+import org.onap.aai.introspection.Introspector;
+import org.onap.aai.introspection.Loader;
+import org.onap.aai.introspection.exceptions.AAIUnmarshallingException;
+import org.onap.aai.setup.SchemaVersion;
+import org.skyscreamer.jsonassert.JSONAssert;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+public class IntrospectorSerializationTest extends AAISetup {
+
+  ObjectMapper mapper;
+  Loader loader;
+
+  @Before
+  public void setup() {
+    loader = loaderFactory.getMoxyLoaderInstance().get(new SchemaVersion("v14"));
+  }
+
+  @Test
+  public void serializePlain() throws IOException, AAIUnmarshallingException {
+    mapper = new ObjectMapper();
+
+    String pserver = new String(Files.readAllBytes(Path.of("src/test/resources/payloads/templates/pserver.json")));
+    Introspector introspector = loader.unmarshal("pserver", pserver);
+    String result = mapper.writeValueAsString(introspector);
+    JSONAssert.assertEquals(pserver, result, false);
+  }
+}