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); } }