This is an automated email from the ASF dual-hosted git repository. rouazana pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 7d14a976c083843d787fe83e3c088151c50e7cf3 Author: Rémi Kowalski <[email protected]> AuthorDate: Tue Jul 16 18:12:48 2019 +0200 JAMES-2813 Add serialization of Failed, Completed, and Throwing Tasks --- .../apache/james/json/JsonGenericSerializer.java | 2 +- pom.xml | 6 ++ server/task-json/pom.xml | 6 ++ .../server/task/json/TaskSerializationTest.java | 108 +++++++++++++++++++++ .../{TestTaskDTO.java => CompletedTaskDTO.java} | 25 +---- .../dto/{TestTaskDTO.java => FailedTaskDTO.java} | 25 +---- .../james/server/task/json/dto/TestTaskDTO.java | 3 - .../dto/{TestTaskDTO.java => ThrowingTaskDTO.java} | 26 +---- .../java/org/apache/james/task/CompletedTask.java} | 38 +++----- .../java/org/apache/james/task/FailedTask.java} | 38 +++----- .../james/task/SerialTaskManagerWorkerTest.java | 8 +- .../java/org/apache/james/task/ThrowingTask.java} | 39 +++----- 12 files changed, 171 insertions(+), 153 deletions(-) diff --git a/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java b/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java index 4cf19d2..aaba17e 100644 --- a/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java +++ b/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java @@ -103,7 +103,7 @@ public class JsonGenericSerializer<T, U extends DTO> { U dto = objectMapper.readValue(objectMapper.treeAsTokens(jsonNode), dtoModule.getDTOClass()); return dtoModule.getToDomainObjectConverter().convert(dto); } catch (MismatchedInputException e) { - throw new InvalidTypeException("Duplicate \"type\" properties found in the json document", e); + throw new InvalidTypeException("Unable to deserialize the json document", e); } } diff --git a/pom.xml b/pom.xml index 8fa9701..97c16f1 100644 --- a/pom.xml +++ b/pom.xml @@ -1710,6 +1710,12 @@ </dependency> <dependency> <groupId>${james.groupId}</groupId> + <artifactId>james-server-task</artifactId> + <type>test-jar</type> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${james.groupId}</groupId> <artifactId>james-server-task-json</artifactId> <version>${project.version}</version> </dependency> diff --git a/server/task-json/pom.xml b/server/task-json/pom.xml index 8e91a57..5f88cb0 100644 --- a/server/task-json/pom.xml +++ b/server/task-json/pom.xml @@ -52,6 +52,12 @@ <artifactId>james-server-task</artifactId> </dependency> <dependency> + <groupId>${james.groupId}</groupId> + <artifactId>james-server-task</artifactId> + <type>test-jar</type> + <scope>test</scope> + </dependency> + <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java b/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java new file mode 100644 index 0000000..103e6e9 --- /dev/null +++ b/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java @@ -0,0 +1,108 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you 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. * + * ***************************************************************/ + +package org.apache.james.server.task.json; + +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; + +import org.apache.james.json.DTOModule; +import org.apache.james.server.task.json.dto.CompletedTaskDTO; +import org.apache.james.server.task.json.dto.FailedTaskDTO; +import org.apache.james.server.task.json.dto.TaskDTOModule; +import org.apache.james.server.task.json.dto.ThrowingTaskDTO; +import org.apache.james.task.CompletedTask; +import org.apache.james.task.FailedTask; +import org.apache.james.task.Task; +import org.apache.james.task.ThrowingTask; +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.core.JsonProcessingException; + +class TaskSerializationTest { + + private static final String SERIALIZED_FAILED_TASK = "{\"type\": \"failed-task\"}"; + private TaskDTOModule failedTaskModule = DTOModule + .forDomainObject(FailedTask.class) + .convertToDTO(FailedTaskDTO.class) + .toDomainObjectConverter(dto -> new FailedTask()) + .toDTOConverter((task, typeName) -> new FailedTaskDTO(typeName)) + .typeName("failed-task") + .withFactory(TaskDTOModule::new); + + private static final String SERIALIZED_COMPLETED_TASK = "{\"type\": \"completed-task\"}"; + private TaskDTOModule completedTaskModule = DTOModule + .forDomainObject(CompletedTask.class) + .convertToDTO(CompletedTaskDTO.class) + .toDomainObjectConverter(dto -> new CompletedTask()) + .toDTOConverter((task, typeName) -> new CompletedTaskDTO(typeName)) + .typeName("completed-task") + .withFactory(TaskDTOModule::new); + + private static final String SERIALIZED_THROWING_TASK = "{\"type\": \"throwing-task\"}"; + private TaskDTOModule throwingTaskModule = DTOModule + .forDomainObject(ThrowingTask.class) + .convertToDTO(ThrowingTaskDTO.class) + .toDomainObjectConverter(dto -> new ThrowingTask()) + .toDTOConverter((task, typeName) -> new ThrowingTaskDTO(typeName)) + .typeName("throwing-task") + .withFactory(TaskDTOModule::new); + + @Test + void failedTaskShouldSerialize() throws JsonProcessingException { + FailedTask failedTask = new FailedTask(); + + String actual = new JsonTaskSerializer(failedTaskModule).serialize(failedTask); + assertThatJson(actual).isEqualTo(SERIALIZED_FAILED_TASK); + } + + @Test + void failedTaskShouldDeserialize() throws IOException { + Task task = new JsonTaskSerializer(failedTaskModule).deserialize(SERIALIZED_FAILED_TASK); + assertThat(task).isInstanceOf(FailedTask.class); + } + + @Test + void completedTaskShouldSerialize() throws JsonProcessingException { + CompletedTask completedTask = new CompletedTask(); + + String actual = new JsonTaskSerializer(completedTaskModule).serialize(completedTask); + assertThatJson(actual).isEqualTo(SERIALIZED_COMPLETED_TASK); + } + + @Test + void completedTaskShouldDeserialize() throws IOException { + Task task = new JsonTaskSerializer(completedTaskModule).deserialize(SERIALIZED_COMPLETED_TASK); + assertThat(task).isInstanceOf(CompletedTask.class); + } + + @Test + void throwingTaskShouldSerialize() throws JsonProcessingException { + ThrowingTask throwingTask = new ThrowingTask(); + + String actual = new JsonTaskSerializer(throwingTaskModule).serialize(throwingTask); + assertThatJson(actual).isEqualTo(SERIALIZED_THROWING_TASK); + } + + @Test + void throwingTaskShouldDeserialize() throws IOException { + Task task = new JsonTaskSerializer(throwingTaskModule).deserialize(SERIALIZED_THROWING_TASK); + assertThat(task).isInstanceOf(ThrowingTask.class); + } +} diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/CompletedTaskDTO.java similarity index 72% copy from server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java copy to server/task-json/src/test/java/org/apache/james/server/task/json/dto/CompletedTaskDTO.java index 3a67475..c67a4dc 100644 --- a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java +++ b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/CompletedTaskDTO.java @@ -16,39 +16,20 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ - package org.apache.james.server.task.json.dto; -import org.apache.james.server.task.json.TestTask; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; -public class TestTaskDTO implements TaskDTO { - private final long parameter; - private final String type; +public class CompletedTaskDTO implements TaskDTO { + private final String type; - @JsonCreator - public TestTaskDTO(@JsonProperty("type") String type, @JsonProperty("parameter") long parameter) { + public CompletedTaskDTO(@JsonProperty("type") String type) { this.type = type; - this.parameter = parameter; - } - - public long getParameter() { - return parameter; } @Override public String getType() { return type; } - - @JsonIgnore - public TestTask toTask() { - return new TestTask(parameter); - } - - } diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/FailedTaskDTO.java similarity index 72% copy from server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java copy to server/task-json/src/test/java/org/apache/james/server/task/json/dto/FailedTaskDTO.java index 3a67475..5b97e05 100644 --- a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java +++ b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/FailedTaskDTO.java @@ -16,39 +16,20 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ - package org.apache.james.server.task.json.dto; -import org.apache.james.server.task.json.TestTask; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; -public class TestTaskDTO implements TaskDTO { - private final long parameter; - private final String type; +public class FailedTaskDTO implements TaskDTO { + private final String type; - @JsonCreator - public TestTaskDTO(@JsonProperty("type") String type, @JsonProperty("parameter") long parameter) { + public FailedTaskDTO(@JsonProperty("type") String type) { this.type = type; - this.parameter = parameter; - } - - public long getParameter() { - return parameter; } @Override public String getType() { return type; } - - @JsonIgnore - public TestTask toTask() { - return new TestTask(parameter); - } - - } diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java index 3a67475..b8f050d 100644 --- a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java +++ b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java @@ -21,7 +21,6 @@ package org.apache.james.server.task.json.dto; import org.apache.james.server.task.json.TestTask; -import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; @@ -29,8 +28,6 @@ public class TestTaskDTO implements TaskDTO { private final long parameter; private final String type; - - @JsonCreator public TestTaskDTO(@JsonProperty("type") String type, @JsonProperty("parameter") long parameter) { this.type = type; this.parameter = parameter; diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/ThrowingTaskDTO.java similarity index 72% copy from server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java copy to server/task-json/src/test/java/org/apache/james/server/task/json/dto/ThrowingTaskDTO.java index 3a67475..d9d576d 100644 --- a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java +++ b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/ThrowingTaskDTO.java @@ -16,39 +16,21 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ - package org.apache.james.server.task.json.dto; -import org.apache.james.server.task.json.TestTask; - -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; -public class TestTaskDTO implements TaskDTO { - private final long parameter; - private final String type; +public class ThrowingTaskDTO implements TaskDTO { + private final String type; - @JsonCreator - public TestTaskDTO(@JsonProperty("type") String type, @JsonProperty("parameter") long parameter) { + public ThrowingTaskDTO(@JsonProperty("type") String type) { this.type = type; - this.parameter = parameter; - } - - public long getParameter() { - return parameter; } @Override public String getType() { return type; } - - @JsonIgnore - public TestTask toTask() { - return new TestTask(parameter); - } - - } + diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java b/server/task/src/test/java/org/apache/james/task/CompletedTask.java similarity index 61% copy from server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java copy to server/task/src/test/java/org/apache/james/task/CompletedTask.java index 3a67475..96133ed 100644 --- a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java +++ b/server/task/src/test/java/org/apache/james/task/CompletedTask.java @@ -16,39 +16,25 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ +package org.apache.james.task; -package org.apache.james.server.task.json.dto; +import java.util.Optional; -import org.apache.james.server.task.json.TestTask; +public class CompletedTask implements Task { + public static final String TYPE = "completed"; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; - -public class TestTaskDTO implements TaskDTO { - private final long parameter; - private final String type; - - - @JsonCreator - public TestTaskDTO(@JsonProperty("type") String type, @JsonProperty("parameter") long parameter) { - this.type = type; - this.parameter = parameter; - } - - public long getParameter() { - return parameter; + @Override + public Result run() throws InterruptedException { + return Result.COMPLETED; } @Override - public String getType() { - return type; + public String type() { + return TYPE; } - @JsonIgnore - public TestTask toTask() { - return new TestTask(parameter); + @Override + public Optional<TaskExecutionDetails.AdditionalInformation> details() { + return Optional.empty(); } - - } diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java b/server/task/src/test/java/org/apache/james/task/FailedTask.java similarity index 61% copy from server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java copy to server/task/src/test/java/org/apache/james/task/FailedTask.java index 3a67475..127c96e 100644 --- a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java +++ b/server/task/src/test/java/org/apache/james/task/FailedTask.java @@ -16,39 +16,25 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ +package org.apache.james.task; -package org.apache.james.server.task.json.dto; +import java.util.Optional; -import org.apache.james.server.task.json.TestTask; +public class FailedTask implements Task { + public static final String TYPE = "failed"; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; - -public class TestTaskDTO implements TaskDTO { - private final long parameter; - private final String type; - - - @JsonCreator - public TestTaskDTO(@JsonProperty("type") String type, @JsonProperty("parameter") long parameter) { - this.type = type; - this.parameter = parameter; - } - - public long getParameter() { - return parameter; + @Override + public Result run() throws InterruptedException { + return Result.PARTIAL; } @Override - public String getType() { - return type; + public String type() { + return TYPE; } - @JsonIgnore - public TestTask toTask() { - return new TestTask(parameter); + @Override + public Optional<TaskExecutionDetails.AdditionalInformation> details() { + return Optional.empty(); } - - } diff --git a/server/task/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java b/server/task/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java index 77aaf88..2aa1dc0 100644 --- a/server/task/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java +++ b/server/task/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java @@ -40,11 +40,9 @@ class SerialTaskManagerWorkerTest { private final SerialTaskManagerWorker worker = new SerialTaskManagerWorker(); - private final Task successfulTask = () -> Task.Result.COMPLETED; - private final Task failedTask = () -> Task.Result.PARTIAL; - private final Task throwingTask = () -> { - throw new RuntimeException("Throwing Task"); - }; + private final Task successfulTask = new CompletedTask(); + private final Task failedTask = new FailedTask(); + private final Task throwingTask = new ThrowingTask(); @AfterEach void tearDown() throws IOException { diff --git a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java b/server/task/src/test/java/org/apache/james/task/ThrowingTask.java similarity index 61% copy from server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java copy to server/task/src/test/java/org/apache/james/task/ThrowingTask.java index 3a67475..eafe862 100644 --- a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java +++ b/server/task/src/test/java/org/apache/james/task/ThrowingTask.java @@ -16,39 +16,26 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ +package org.apache.james.task; -package org.apache.james.server.task.json.dto; +import java.util.Optional; -import org.apache.james.server.task.json.TestTask; +public class ThrowingTask implements Task { + public static final String TYPE = "throwing"; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; - -public class TestTaskDTO implements TaskDTO { - private final long parameter; - private final String type; - - - @JsonCreator - public TestTaskDTO(@JsonProperty("type") String type, @JsonProperty("parameter") long parameter) { - this.type = type; - this.parameter = parameter; - } - - public long getParameter() { - return parameter; + @Override + public Result run() throws InterruptedException { + throw new RuntimeException("Throwing Task"); } @Override - public String getType() { - return type; + public String type() { + return TYPE; } - @JsonIgnore - public TestTask toTask() { - return new TestTask(parameter); + @Override + public Optional<TaskExecutionDetails.AdditionalInformation> details() { + return Optional.empty(); } - - } + --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
