From 57dcc48b92144a6810453d754fa0f19f81090566 Mon Sep 17 00:00:00 2001
From: mdhtr <mdhtr@users.noreply.github.com>
Date: Mon, 22 Jun 2020 16:26:42 +0200
Subject: [PATCH 1/4] Examples for the first version of the article

---
 json-2/pom.xml                                | 60 +++++++++++++++++++
 .../JacksonDeserializationExample.java        | 40 +++++++++++++
 .../jackson/JacksonExamplePerson.java         | 19 ++++++
 .../hydrajsonld/HydraJsonldExamplePerson.java | 15 +++++
 .../HydraJsonldSerializationExample.java      | 52 ++++++++++++++++
 .../JacksonJsonLdSerializationExample.java    | 25 ++++++++
 .../JacksonJsonldExamplePerson.java           | 17 ++++++
 7 files changed, 228 insertions(+)
 create mode 100644 json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationExample.java
 create mode 100644 json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonExamplePerson.java
 create mode 100644 json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldExamplePerson.java
 create mode 100644 json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationExample.java
 create mode 100644 json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationExample.java
 create mode 100644 json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonldExamplePerson.java

diff --git a/json-2/pom.xml b/json-2/pom.xml
index e0295af59b..73c26e8259 100644
--- a/json-2/pom.xml
+++ b/json-2/pom.xml
@@ -49,6 +49,66 @@
             <artifactId>commons-lang3</artifactId>
             <version>3.9</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>2.11.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>2.11.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.io-informatics.oss</groupId>
+            <artifactId>jackson-jsonld</artifactId>
+            <version>0.1.1</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jackson-databind</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jackson-annotations</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jackson-core</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jsonld-java</artifactId>
+                    <groupId>com.github.jsonld-java</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>de.escalon.hypermedia</groupId>
+            <artifactId>hydra-jsonld</artifactId>
+            <version>0.4.2</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jackson-databind</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.github.jsonld-java</groupId>
+            <artifactId>jsonld-java</artifactId>
+            <version>0.13.0</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>jackson-core</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+                <exclusion>
+                    <artifactId>jackson-databind</artifactId>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
     </dependencies>
     <properties>
         <jsoniter.version>0.9.23</jsoniter.version>
diff --git a/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationExample.java b/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationExample.java
new file mode 100644
index 0000000000..b80769b408
--- /dev/null
+++ b/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationExample.java
@@ -0,0 +1,40 @@
+package com.baeldung.jsonld.deserialization.jsonldjava.jackson;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.jsonldjava.core.JsonLdOptions;
+import com.github.jsonldjava.core.JsonLdProcessor;
+import com.github.jsonldjava.utils.JsonUtils;
+
+public class JacksonDeserializationExample {
+    public static void main(String[] args) throws IOException {
+        String exampleJsonld ="{" + 
+           "  \"@context\": {" + 
+           "    \"@vocab\": \"http://schema.org/\"," + 
+           "    \"knows\": {" + 
+           "      \"@type\": \"@id\"" + 
+           "    }" + 
+           "  }," + 
+           "  \"@type\": \"Person\"," + 
+           "  \"@id\": \"http://example.com/person/1234\"," + 
+           "  \"name\": \"Example Name\"," + 
+           "  \"knows\": \"http://example.com/person/2345\"" + 
+           "}";
+
+        Object jsonObject = JsonUtils.fromString(exampleJsonld);
+        Object compact = JsonLdProcessor.compact(jsonObject, new HashMap(), new JsonLdOptions());
+        String compactContent = JsonUtils.toString(compact);
+
+        System.out.println(JsonUtils.toPrettyString(compact));
+
+        ObjectMapper objectMapper = new ObjectMapper();
+        JacksonExamplePerson person = objectMapper.readValue(compactContent, JacksonExamplePerson.class);
+
+        System.out.println(person.id);
+        System.out.println(person.name);
+        System.out.println(person.knows.id);
+    }
+}
diff --git a/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonExamplePerson.java b/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonExamplePerson.java
new file mode 100644
index 0000000000..2e9f38e665
--- /dev/null
+++ b/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonExamplePerson.java
@@ -0,0 +1,19 @@
+package com.baeldung.jsonld.deserialization.jsonldjava.jackson;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class JacksonExamplePerson {
+    @JsonProperty("@id")
+    public String id;
+    @JsonProperty("http://schema.org/name")
+    public String name;
+    @JsonProperty("http://schema.org/knows")
+    public Link knows;
+
+    public class Link {
+        @JsonProperty("@id")
+        public String id;
+    }
+}
diff --git a/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldExamplePerson.java b/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldExamplePerson.java
new file mode 100644
index 0000000000..16b2199a73
--- /dev/null
+++ b/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldExamplePerson.java
@@ -0,0 +1,15 @@
+package com.baeldung.jsonld.serialization.hydrajsonld;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import de.escalon.hypermedia.hydra.mapping.Expose;
+import de.escalon.hypermedia.hydra.mapping.Vocab;
+
+@Vocab("http://example.com/vocab/")
+@Expose("person")
+public class HydraJsonldExamplePerson {
+    @JsonProperty("@id")
+    public String id;
+    @Expose("fullName")
+    public String name;
+}
diff --git a/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationExample.java b/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationExample.java
new file mode 100644
index 0000000000..3d3531b0b5
--- /dev/null
+++ b/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationExample.java
@@ -0,0 +1,52 @@
+package com.baeldung.jsonld.serialization.hydrajsonld;
+
+import java.io.IOException;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.BeanDescription;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationConfig;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
+import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase;
+
+import de.escalon.hypermedia.hydra.serialize.JacksonHydraSerializer;
+
+public class HydraJsonldSerializationExample {
+    public static void main(String[] args) throws IOException {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+        mapper.registerModule(getJacksonHydraSerializerModule());
+
+        HydraJsonldExamplePerson person = new HydraJsonldExamplePerson();
+        person.id = "http://example.com/person/1234";
+        person.name = "Example Name";
+
+        System.out.println(mapper.writerWithDefaultPrettyPrinter()
+            .writeValueAsString(person));
+    }
+
+    public static SimpleModule getJacksonHydraSerializerModule() {
+        return new SimpleModule() {
+
+            @Override
+            public void setupModule(SetupContext context) {
+                super.setupModule(context);
+
+                context.addBeanSerializerModifier(new BeanSerializerModifier() {
+
+                    @Override
+                    public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) {
+
+                        if (serializer instanceof BeanSerializerBase) {
+                            return new JacksonHydraSerializer((BeanSerializerBase) serializer);
+                        } else {
+                            return serializer;
+                        }
+                    }
+                });
+            }
+        };
+    }
+}
diff --git a/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationExample.java b/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationExample.java
new file mode 100644
index 0000000000..6a1acee1b8
--- /dev/null
+++ b/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationExample.java
@@ -0,0 +1,25 @@
+package com.baeldung.jsonld.serialization.jacksonjsonld;
+
+import java.io.IOException;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import ioinformarics.oss.jackson.module.jsonld.HydraCollection;
+import ioinformarics.oss.jackson.module.jsonld.JsonldGraph;
+import ioinformarics.oss.jackson.module.jsonld.JsonldModule;
+import ioinformarics.oss.jackson.module.jsonld.JsonldResource;
+
+public class JacksonJsonLdSerializationExample {
+    public static void main(String[] args) throws IOException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.registerModule(new JsonldModule());
+
+        JacksonJsonldExamplePerson person = new JacksonJsonldExamplePerson();
+
+        JsonldResource jsonldResource = JsonldResource.Builder.create()
+            .build(person);
+
+        System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
+            .writeValueAsString(jsonldResource));
+    }
+}
diff --git a/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonldExamplePerson.java b/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonldExamplePerson.java
new file mode 100644
index 0000000000..a3161ba1d3
--- /dev/null
+++ b/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonldExamplePerson.java
@@ -0,0 +1,17 @@
+package com.baeldung.jsonld.serialization.jacksonjsonld;
+
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldId;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldLink;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldNamespace;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldProperty;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldType;
+
+@JsonldNamespace(name = "s", uri = "http://schema.org/")
+@JsonldLink(rel = "s:knows", name = "knows", href = "http://example.com/person/2345")
+@JsonldType("s:Person")
+class JacksonJsonldExamplePerson {
+    @JsonldId
+    public String id = "http://example.com/person/1234";
+    @JsonldProperty("s:name")
+    public String name = "Example Name";
+}

From 64dc02f18fdbde9e728083aef09cf7318f9145cf Mon Sep 17 00:00:00 2001
From: mdhtr <mdhtr@users.noreply.github.com>
Date: Sun, 12 Jul 2020 23:29:55 +0200
Subject: [PATCH 2/4] Examples for the second version of the article

---
 .../JacksonDeserializationExample.java        | 40 ------------------
 .../hydrajsonld/HydraJsonldExamplePerson.java | 15 -------
 .../JacksonJsonLdSerializationExample.java    | 25 -----------
 .../JacksonJsonldExamplePerson.java           | 17 --------
 .../JacksonDeserializationUnitTest.java       | 41 ++++++++++++++++++
 .../jsonldjava/jackson/Person.java}           |  4 +-
 .../HydraJsonldSerializationUnitTest.java}    | 37 +++++++++++-----
 .../JacksonJsonLdSerializationUnitTest.java   | 42 +++++++++++++++++++
 8 files changed, 112 insertions(+), 109 deletions(-)
 delete mode 100644 json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationExample.java
 delete mode 100644 json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldExamplePerson.java
 delete mode 100644 json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationExample.java
 delete mode 100644 json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonldExamplePerson.java
 create mode 100644 json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
 rename json-2/src/{main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonExamplePerson.java => test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java} (88%)
 rename json-2/src/{main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationExample.java => test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java} (52%)
 create mode 100644 json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java

diff --git a/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationExample.java b/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationExample.java
deleted file mode 100644
index b80769b408..0000000000
--- a/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationExample.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.baeldung.jsonld.deserialization.jsonldjava.jackson;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.github.jsonldjava.core.JsonLdOptions;
-import com.github.jsonldjava.core.JsonLdProcessor;
-import com.github.jsonldjava.utils.JsonUtils;
-
-public class JacksonDeserializationExample {
-    public static void main(String[] args) throws IOException {
-        String exampleJsonld ="{" + 
-           "  \"@context\": {" + 
-           "    \"@vocab\": \"http://schema.org/\"," + 
-           "    \"knows\": {" + 
-           "      \"@type\": \"@id\"" + 
-           "    }" + 
-           "  }," + 
-           "  \"@type\": \"Person\"," + 
-           "  \"@id\": \"http://example.com/person/1234\"," + 
-           "  \"name\": \"Example Name\"," + 
-           "  \"knows\": \"http://example.com/person/2345\"" + 
-           "}";
-
-        Object jsonObject = JsonUtils.fromString(exampleJsonld);
-        Object compact = JsonLdProcessor.compact(jsonObject, new HashMap(), new JsonLdOptions());
-        String compactContent = JsonUtils.toString(compact);
-
-        System.out.println(JsonUtils.toPrettyString(compact));
-
-        ObjectMapper objectMapper = new ObjectMapper();
-        JacksonExamplePerson person = objectMapper.readValue(compactContent, JacksonExamplePerson.class);
-
-        System.out.println(person.id);
-        System.out.println(person.name);
-        System.out.println(person.knows.id);
-    }
-}
diff --git a/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldExamplePerson.java b/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldExamplePerson.java
deleted file mode 100644
index 16b2199a73..0000000000
--- a/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldExamplePerson.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.baeldung.jsonld.serialization.hydrajsonld;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-import de.escalon.hypermedia.hydra.mapping.Expose;
-import de.escalon.hypermedia.hydra.mapping.Vocab;
-
-@Vocab("http://example.com/vocab/")
-@Expose("person")
-public class HydraJsonldExamplePerson {
-    @JsonProperty("@id")
-    public String id;
-    @Expose("fullName")
-    public String name;
-}
diff --git a/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationExample.java b/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationExample.java
deleted file mode 100644
index 6a1acee1b8..0000000000
--- a/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationExample.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.baeldung.jsonld.serialization.jacksonjsonld;
-
-import java.io.IOException;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import ioinformarics.oss.jackson.module.jsonld.HydraCollection;
-import ioinformarics.oss.jackson.module.jsonld.JsonldGraph;
-import ioinformarics.oss.jackson.module.jsonld.JsonldModule;
-import ioinformarics.oss.jackson.module.jsonld.JsonldResource;
-
-public class JacksonJsonLdSerializationExample {
-    public static void main(String[] args) throws IOException {
-        ObjectMapper objectMapper = new ObjectMapper();
-        objectMapper.registerModule(new JsonldModule());
-
-        JacksonJsonldExamplePerson person = new JacksonJsonldExamplePerson();
-
-        JsonldResource jsonldResource = JsonldResource.Builder.create()
-            .build(person);
-
-        System.out.println(objectMapper.writerWithDefaultPrettyPrinter()
-            .writeValueAsString(jsonldResource));
-    }
-}
diff --git a/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonldExamplePerson.java b/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonldExamplePerson.java
deleted file mode 100644
index a3161ba1d3..0000000000
--- a/json-2/src/main/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonldExamplePerson.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.baeldung.jsonld.serialization.jacksonjsonld;
-
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldId;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldLink;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldNamespace;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldProperty;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldType;
-
-@JsonldNamespace(name = "s", uri = "http://schema.org/")
-@JsonldLink(rel = "s:knows", name = "knows", href = "http://example.com/person/2345")
-@JsonldType("s:Person")
-class JacksonJsonldExamplePerson {
-    @JsonldId
-    public String id = "http://example.com/person/1234";
-    @JsonldProperty("s:name")
-    public String name = "Example Name";
-}
diff --git a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
new file mode 100644
index 0000000000..35a2613957
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
@@ -0,0 +1,41 @@
+package com.baeldung.jsonld.deserialization.jsonldjava.jackson;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.io.IOException;
+import java.util.HashMap;
+
+import org.junit.jupiter.api.Test;
+
+import com.baeldung.jsonld.deserialization.jsonldjava.jackson.Person.Link;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.jsonldjava.core.JsonLdOptions;
+import com.github.jsonldjava.core.JsonLdProcessor;
+import com.github.jsonldjava.utils.JsonUtils;
+
+public class JacksonDeserializationUnitTest {
+
+    @Test
+    void givenAJsonLdObject_whenCompactIsUsedWithEmptyContext_thenItCanBeDeserializedIntoAJacksonAnnotatedJavaObject() throws IOException {
+        String inputJsonLd = "{\"@context\":{\"@vocab\":\"http://schema.org/\",\"knows\":{\"@type\":\"@id\"}},\"@type\":\"Person\",\"@id\":\"http://example.com/person/1234\",\"name\":\"Example Name\",\"knows\":\"http://example.com/person/2345\"}";
+
+        Object jsonObject = JsonUtils.fromString(inputJsonLd);
+        Object compact = JsonLdProcessor.compact(jsonObject, new HashMap(), new JsonLdOptions());
+        String compactContent = JsonUtils.toString(compact);
+
+        assertEquals("{\"@id\":\"http://example.com/person/1234\",\"@type\":\"http://schema.org/Person\",\"http://schema.org/knows\":{\"@id\":\"http://example.com/person/2345\"},\"http://schema.org/name\":\"Example Name\"}", compactContent);
+
+        ObjectMapper objectMapper = new ObjectMapper();
+        Person person = objectMapper.readValue(compactContent, Person.class);
+
+        Person expectedPerson = new Person();
+        expectedPerson.id = "http://example.com/person/1234";
+        expectedPerson.name = "Example Name";
+        expectedPerson.knows = new Link();
+        expectedPerson.knows.id = "http://example.com/person/2345";
+
+        assertEquals(expectedPerson.id, person.id);
+        assertEquals(expectedPerson.name, person.name);
+        assertEquals(expectedPerson.knows.id, person.knows.id);
+    }
+}
diff --git a/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonExamplePerson.java b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java
similarity index 88%
rename from json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonExamplePerson.java
rename to json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java
index 2e9f38e665..0cb6d43336 100644
--- a/json-2/src/main/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonExamplePerson.java
+++ b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/Person.java
@@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class JacksonExamplePerson {
+public class Person {
     @JsonProperty("@id")
     public String id;
     @JsonProperty("http://schema.org/name")
@@ -12,7 +12,7 @@ public class JacksonExamplePerson {
     @JsonProperty("http://schema.org/knows")
     public Link knows;
 
-    public class Link {
+    public static class Link {
         @JsonProperty("@id")
         public String id;
     }
diff --git a/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationExample.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
similarity index 52%
rename from json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationExample.java
rename to json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
index 3d3531b0b5..e5d1e35236 100644
--- a/json-2/src/main/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationExample.java
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
@@ -1,8 +1,12 @@
 package com.baeldung.jsonld.serialization.hydrajsonld;
 
-import java.io.IOException;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.BeanDescription;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -11,23 +15,36 @@ import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
 import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase;
 
+import de.escalon.hypermedia.hydra.mapping.Expose;
+import de.escalon.hypermedia.hydra.mapping.Vocab;
 import de.escalon.hypermedia.hydra.serialize.JacksonHydraSerializer;
 
-public class HydraJsonldSerializationExample {
-    public static void main(String[] args) throws IOException {
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-        mapper.registerModule(getJacksonHydraSerializerModule());
+public class HydraJsonldSerializationUnitTest {
+    @Vocab("http://example.com/vocab/")
+    @Expose("person")
+    static class Person {
+        @JsonProperty("@id")
+        public String id;
+        @Expose("fullName")
+        public String name;
+    }
 
-        HydraJsonldExamplePerson person = new HydraJsonldExamplePerson();
+    @Test
+    void givenAHydraJsonldAnnotatedObject_whenJacksonHydraSerializerIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.registerModule(getJacksonHydraSerializerModule());
+        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+
+        Person person = new Person();
         person.id = "http://example.com/person/1234";
         person.name = "Example Name";
 
-        System.out.println(mapper.writerWithDefaultPrettyPrinter()
-            .writeValueAsString(person));
+        String personJsonLd = objectMapper.writeValueAsString(person);
+
+        assertEquals("{\"@context\":{\"@vocab\":\"http://example.com/vocab/\",\"name\":\"fullName\"},\"@type\":\"person\",\"name\":\"Example Name\",\"@id\":\"http://example.com/person/1234\"}", personJsonLd);
     }
 
-    public static SimpleModule getJacksonHydraSerializerModule() {
+    static SimpleModule getJacksonHydraSerializerModule() {
         return new SimpleModule() {
 
             @Override
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
new file mode 100644
index 0000000000..b539c73608
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
@@ -0,0 +1,42 @@
+package com.baeldung.jsonld.serialization.jacksonjsonld;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import ioinformarics.oss.jackson.module.jsonld.JsonldModule;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldId;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldLink;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldNamespace;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldProperty;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldResource;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldType;
+
+public class JacksonJsonLdSerializationUnitTest {
+    @JsonldResource
+    @JsonldNamespace(name = "s", uri = "http://schema.org/")
+    @JsonldType("s:Person")
+    @JsonldLink(rel = "s:knows", name = "knows", href = "http://example.com/person/2345")
+    static class Person {
+        @JsonldId
+        public String id = "http://example.com/person/1234";
+        @JsonldProperty("s:name")
+        public String name = "Example Name";
+    }
+
+    @Test
+    void givenAJacksonJsonldAnnotatedObject_whenJsonldModuleIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.registerModule(new JsonldModule());
+
+        Person person = new Person();
+        String personJsonLd = objectMapper.writeValueAsString(person);
+
+        assertEquals(
+            "{\"@type\":\"s:Person\",\"@context\":{\"s\":\"http://schema.org/\",\"name\":\"s:name\",\"knows\":{\"@id\":\"s:knows\",\"@type\":\"@id\"}},\"name\":\"Example Name\",\"@id\":\"http://example.com/person/1234\",\"knows\":\"http://example.com/person/2345\"}",
+            personJsonLd);
+    }
+}

From e3999c9112a8aa46173aa7c09ea72626a44f1113 Mon Sep 17 00:00:00 2001
From: mdhtr <mdhtr@users.noreply.github.com>
Date: Mon, 20 Jul 2020 21:14:49 +0200
Subject: [PATCH 3/4] Changes based on editor review

- extract Person classes from test classes
- shorten test name of one test
- fix one warning
---
 .../JacksonDeserializationUnitTest.java       |  4 ++--
 .../HydraJsonldSerializationUnitTest.java     | 12 ------------
 .../serialization/hydrajsonld/Person.java     | 15 +++++++++++++++
 .../JacksonJsonLdSerializationUnitTest.java   | 17 -----------------
 .../serialization/jacksonjsonld/Person.java   | 19 +++++++++++++++++++
 5 files changed, 36 insertions(+), 31 deletions(-)
 create mode 100644 json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java
 create mode 100644 json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java

diff --git a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
index 35a2613957..df09a98f76 100644
--- a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
+++ b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
@@ -16,11 +16,11 @@ import com.github.jsonldjava.utils.JsonUtils;
 public class JacksonDeserializationUnitTest {
 
     @Test
-    void givenAJsonLdObject_whenCompactIsUsedWithEmptyContext_thenItCanBeDeserializedIntoAJacksonAnnotatedJavaObject() throws IOException {
+    void givenAJsonLdObject_whenCompactIsUsedWithEmptyContext_thenItCanBeDeserializedWithJackson() throws IOException {
         String inputJsonLd = "{\"@context\":{\"@vocab\":\"http://schema.org/\",\"knows\":{\"@type\":\"@id\"}},\"@type\":\"Person\",\"@id\":\"http://example.com/person/1234\",\"name\":\"Example Name\",\"knows\":\"http://example.com/person/2345\"}";
 
         Object jsonObject = JsonUtils.fromString(inputJsonLd);
-        Object compact = JsonLdProcessor.compact(jsonObject, new HashMap(), new JsonLdOptions());
+        Object compact = JsonLdProcessor.compact(jsonObject, new HashMap<>(), new JsonLdOptions());
         String compactContent = JsonUtils.toString(compact);
 
         assertEquals("{\"@id\":\"http://example.com/person/1234\",\"@type\":\"http://schema.org/Person\",\"http://schema.org/knows\":{\"@id\":\"http://example.com/person/2345\"},\"http://schema.org/name\":\"Example Name\"}", compactContent);
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
index e5d1e35236..308987a0bd 100644
--- a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
@@ -5,7 +5,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import org.junit.jupiter.api.Test;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.BeanDescription;
 import com.fasterxml.jackson.databind.JsonSerializer;
@@ -15,20 +14,9 @@ import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
 import com.fasterxml.jackson.databind.ser.std.BeanSerializerBase;
 
-import de.escalon.hypermedia.hydra.mapping.Expose;
-import de.escalon.hypermedia.hydra.mapping.Vocab;
 import de.escalon.hypermedia.hydra.serialize.JacksonHydraSerializer;
 
 public class HydraJsonldSerializationUnitTest {
-    @Vocab("http://example.com/vocab/")
-    @Expose("person")
-    static class Person {
-        @JsonProperty("@id")
-        public String id;
-        @Expose("fullName")
-        public String name;
-    }
-
     @Test
     void givenAHydraJsonldAnnotatedObject_whenJacksonHydraSerializerIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException {
         ObjectMapper objectMapper = new ObjectMapper();
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java
new file mode 100644
index 0000000000..87587d02ac
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/Person.java
@@ -0,0 +1,15 @@
+package com.baeldung.jsonld.serialization.hydrajsonld;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import de.escalon.hypermedia.hydra.mapping.Expose;
+import de.escalon.hypermedia.hydra.mapping.Vocab;
+
+@Vocab("http://example.com/vocab/")
+@Expose("person")
+public class Person {
+    @JsonProperty("@id")
+    public String id;
+    @Expose("fullName")
+    public String name;
+}
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
index b539c73608..07e44b4981 100644
--- a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
@@ -8,25 +8,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import ioinformarics.oss.jackson.module.jsonld.JsonldModule;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldId;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldLink;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldNamespace;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldProperty;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldResource;
-import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldType;
 
 public class JacksonJsonLdSerializationUnitTest {
-    @JsonldResource
-    @JsonldNamespace(name = "s", uri = "http://schema.org/")
-    @JsonldType("s:Person")
-    @JsonldLink(rel = "s:knows", name = "knows", href = "http://example.com/person/2345")
-    static class Person {
-        @JsonldId
-        public String id = "http://example.com/person/1234";
-        @JsonldProperty("s:name")
-        public String name = "Example Name";
-    }
-
     @Test
     void givenAJacksonJsonldAnnotatedObject_whenJsonldModuleIsUsed_thenAJsonLdDocumentIsGenerated() throws JsonProcessingException {
         ObjectMapper objectMapper = new ObjectMapper();
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java
new file mode 100644
index 0000000000..d0c9e4f111
--- /dev/null
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/Person.java
@@ -0,0 +1,19 @@
+package com.baeldung.jsonld.serialization.jacksonjsonld;
+
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldId;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldLink;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldNamespace;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldProperty;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldResource;
+import ioinformarics.oss.jackson.module.jsonld.annotation.JsonldType;
+
+@JsonldResource
+@JsonldNamespace(name = "s", uri = "http://schema.org/")
+@JsonldType("s:Person")
+@JsonldLink(rel = "s:knows", name = "knows", href = "http://example.com/person/2345")
+public class Person {
+    @JsonldId
+    public String id = "http://example.com/person/1234";
+    @JsonldProperty("s:name")
+    public String name = "Example Name";
+}

From f83f670bf757954f82f5ee688a025d9302656242 Mon Sep 17 00:00:00 2001
From: mdhtr <mdhtr@users.noreply.github.com>
Date: Sun, 26 Jul 2020 09:44:17 +0200
Subject: [PATCH 4/4] Format inline JSON objects by hand

---
 .../JacksonDeserializationUnitTest.java        | 18 ++++++++++++++++--
 .../HydraJsonldSerializationUnitTest.java      | 10 +++++++++-
 .../JacksonJsonLdSerializationUnitTest.java    | 14 +++++++++++---
 3 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
index df09a98f76..9c6b6f976a 100644
--- a/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
+++ b/json-2/src/test/java/com/baeldung/jsonld/deserialization/jsonldjava/jackson/JacksonDeserializationUnitTest.java
@@ -17,13 +17,27 @@ public class JacksonDeserializationUnitTest {
 
     @Test
     void givenAJsonLdObject_whenCompactIsUsedWithEmptyContext_thenItCanBeDeserializedWithJackson() throws IOException {
-        String inputJsonLd = "{\"@context\":{\"@vocab\":\"http://schema.org/\",\"knows\":{\"@type\":\"@id\"}},\"@type\":\"Person\",\"@id\":\"http://example.com/person/1234\",\"name\":\"Example Name\",\"knows\":\"http://example.com/person/2345\"}";
+        String inputJsonLd = "{"
+            + "\"@context\":{"
+            +     "\"@vocab\":\"http://schema.org/\","
+            +     "\"knows\":{\"@type\":\"@id\"}"
+            + "},"
+            + "\"@type\":\"Person\","
+            + "\"@id\":\"http://example.com/person/1234\","
+            + "\"name\":\"Example Name\","
+            + "\"knows\":\"http://example.com/person/2345\""
+            + "}";
 
         Object jsonObject = JsonUtils.fromString(inputJsonLd);
         Object compact = JsonLdProcessor.compact(jsonObject, new HashMap<>(), new JsonLdOptions());
         String compactContent = JsonUtils.toString(compact);
 
-        assertEquals("{\"@id\":\"http://example.com/person/1234\",\"@type\":\"http://schema.org/Person\",\"http://schema.org/knows\":{\"@id\":\"http://example.com/person/2345\"},\"http://schema.org/name\":\"Example Name\"}", compactContent);
+        assertEquals("{"
+            + "\"@id\":\"http://example.com/person/1234\","
+            + "\"@type\":\"http://schema.org/Person\","
+            + "\"http://schema.org/knows\":{\"@id\":\"http://example.com/person/2345\"},"
+            + "\"http://schema.org/name\":\"Example Name\""
+            + "}", compactContent);
 
         ObjectMapper objectMapper = new ObjectMapper();
         Person person = objectMapper.readValue(compactContent, Person.class);
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
index 308987a0bd..06105d579e 100644
--- a/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/hydrajsonld/HydraJsonldSerializationUnitTest.java
@@ -29,7 +29,15 @@ public class HydraJsonldSerializationUnitTest {
 
         String personJsonLd = objectMapper.writeValueAsString(person);
 
-        assertEquals("{\"@context\":{\"@vocab\":\"http://example.com/vocab/\",\"name\":\"fullName\"},\"@type\":\"person\",\"name\":\"Example Name\",\"@id\":\"http://example.com/person/1234\"}", personJsonLd);
+        assertEquals("{"
+            + "\"@context\":{"
+            +     "\"@vocab\":\"http://example.com/vocab/\","
+            +     "\"name\":\"fullName\""
+            + "},"
+            + "\"@type\":\"person\","
+            + "\"name\":\"Example Name\","
+            + "\"@id\":\"http://example.com/person/1234\""
+            + "}", personJsonLd);
     }
 
     static SimpleModule getJacksonHydraSerializerModule() {
diff --git a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
index 07e44b4981..cd41989a53 100644
--- a/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
+++ b/json-2/src/test/java/com/baeldung/jsonld/serialization/jacksonjsonld/JacksonJsonLdSerializationUnitTest.java
@@ -18,8 +18,16 @@ public class JacksonJsonLdSerializationUnitTest {
         Person person = new Person();
         String personJsonLd = objectMapper.writeValueAsString(person);
 
-        assertEquals(
-            "{\"@type\":\"s:Person\",\"@context\":{\"s\":\"http://schema.org/\",\"name\":\"s:name\",\"knows\":{\"@id\":\"s:knows\",\"@type\":\"@id\"}},\"name\":\"Example Name\",\"@id\":\"http://example.com/person/1234\",\"knows\":\"http://example.com/person/2345\"}",
-            personJsonLd);
+        assertEquals("{"
+            + "\"@type\":\"s:Person\","
+            + "\"@context\":{"
+            +     "\"s\":\"http://schema.org/\","
+            +     "\"name\":\"s:name\","
+            +     "\"knows\":{\"@id\":\"s:knows\",\"@type\":\"@id\"}"
+            + "},"
+            + "\"name\":\"Example Name\","
+            + "\"@id\":\"http://example.com/person/1234\","
+            + "\"knows\":\"http://example.com/person/2345\""
+            + "}", personJsonLd);
     }
 }