diff --git a/dataformat-json/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonSerializer.java b/dataformat-json/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonSerializer.java index 6e522922d..769068112 100644 --- a/dataformat-json/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonSerializer.java +++ b/dataformat-json/src/main/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonSerializer.java @@ -15,24 +15,22 @@ */ package org.eclipse.digitaltwin.aas4j.v3.dataformat.json; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.google.common.reflect.TypeToken; import java.util.Collection; -import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.util.ReflectionHelper; +import java.util.List; import org.eclipse.digitaltwin.aas4j.v3.dataformat.SerializationException; import org.eclipse.digitaltwin.aas4j.v3.dataformat.Serializer; import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.serialization.EnumSerializer; +import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.util.ReflectionHelper; import org.eclipse.digitaltwin.aas4j.v3.model.Environment; import org.eclipse.digitaltwin.aas4j.v3.model.Referable; -import java.util.List; -import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.util.AasUtils; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; /** * Class for serializing an instance of AssetAdministrationShellEnvironment or Referables to JSON. @@ -80,10 +78,13 @@ public String write(Referable referable) throws SerializationException { } @Override - public String write(Collection referables) throws SerializationException { - if (referables == null || referables.isEmpty()) { + public String write(Collection referables) throws SerializationException { + if (referables == null) { return null; - } + } else if (referables.isEmpty()) { + return mapper.createArrayNode().toString(); + } + try { return mapper.writerFor(mapper.getTypeFactory().constructCollectionType(List.class, referables.iterator().next().getClass())) .writeValueAsString(referables); diff --git a/dataformat-json/src/test/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonReferableDeserializerTest.java b/dataformat-json/src/test/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonReferableDeserializerTest.java index 7a772e168..68ef1d473 100644 --- a/dataformat-json/src/test/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonReferableDeserializerTest.java +++ b/dataformat-json/src/test/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonReferableDeserializerTest.java @@ -18,9 +18,11 @@ import static org.junit.Assert.assertEquals; import java.io.IOException; +import java.util.Collections; import java.util.List; import org.eclipse.digitaltwin.aas4j.v3.model.AssetAdministrationShell; +import org.eclipse.digitaltwin.aas4j.v3.model.Referable; import org.eclipse.digitaltwin.aas4j.v3.model.Submodel; import org.eclipse.digitaltwin.aas4j.v3.model.SubmodelElement; import org.eclipse.digitaltwin.aas4j.v3.model.SubmodelElementList; @@ -88,4 +90,11 @@ public void testReadSubmodelElementCollection() throws IOException, Deserializat SubmodelElementCollection actual = new JsonDeserializer().readReferable(Examples.SUBMODEL_ELEMENT_COLLECTION.fileContentStream(), SubmodelElementCollection.class); assertEquals(expected, actual); } + + @Test + public void testReadEmptyReferableList() throws DeserializationException { + List emptyList = Collections.emptyList(); + List deserialized = new JsonDeserializer().readReferables("[]", Referable.class); + assertEquals(emptyList, deserialized); + } } diff --git a/dataformat-json/src/test/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonSerializerTest.java b/dataformat-json/src/test/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonSerializerTest.java index 70cb38ed2..2b20fa113 100644 --- a/dataformat-json/src/test/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonSerializerTest.java +++ b/dataformat-json/src/test/java/org/eclipse/digitaltwin/aas4j/v3/dataformat/json/JsonSerializerTest.java @@ -20,6 +20,8 @@ import java.io.File; import java.io.IOException; +import java.util.Collections; +import java.util.List; import java.util.Set; import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.AASSimple; @@ -38,6 +40,7 @@ import org.eclipse.digitaltwin.aas4j.v3.dataformat.json.util.ExampleData; import org.eclipse.digitaltwin.aas4j.v3.dataformat.json.util.Examples; import org.eclipse.digitaltwin.aas4j.v3.model.Environment; +import org.eclipse.digitaltwin.aas4j.v3.model.Referable; public class JsonSerializerTest { @@ -73,6 +76,13 @@ public void testSerializeFullExample() throws SerializationException, JSONExcept validateAndCompare(Examples.EXAMPLE_FULL); } + @Test + public void testSerializeEmptyReferableList() throws SerializationException { + List emptyList = Collections.emptyList(); + String serialized = new JsonSerializer().write(emptyList); + assertEquals("[]", serialized); + } + private void validateAndCompare(ExampleData exampleData) throws IOException, SerializationException, JSONException { String expected = exampleData.fileContent(); String actual = new JsonSerializer().write(exampleData.getModel()); diff --git a/pom.xml b/pom.xml index c7d167ceb..b910262e2 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ 1 0 0 - -milestone-01 + -milestone-02-SNAPSHOT ${revision.major}.${revision.minor}.${revision.patch}${revision.suffix} 1.0.0-milestone-02-SNAPSHOT