You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2021/05/21 07:10:37 UTC
[james-project] 01/02: [PERFORMANCE] JMAP draft was parsing,
formatting then re-parsing JSON
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 27da8d78f38ac4c43268bf0afc55bbe2ba0d4bcd
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue May 18 12:54:46 2021 +0700
[PERFORMANCE] JMAP draft was parsing, formatting then re-parsing JSON
---
.../jmap/draft/methods/integration/GetMailboxesMethodTest.java | 2 +-
.../jmap/draft/methods/integration/SetMessagesMethodTest.java | 2 +-
.../apache/james/jmap/draft/methods/JmapRequestParserImpl.java | 5 ++++-
.../james/jmap/draft/methods/UpdateMessagePatchValidator.java | 2 +-
.../james/jmap/draft/methods/JmapRequestParserImplTest.java | 9 ++++++---
.../jmap/draft/methods/UpdateMessagePatchValidatorTest.java | 3 ++-
6 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
index 1261e75..982c401 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
@@ -343,7 +343,7 @@ public abstract class GetMailboxesMethodTest {
.body(NAME, equalTo("error"))
.body(ARGUMENTS + ".type", equalTo("invalidArguments"))
.body(ARGUMENTS + ".description", containsString("Cannot deserialize value of type `java.util.ArrayList<org.apache.james.mailbox.model.MailboxId>` from Boolean value (token `JsonToken.VALUE_TRUE`)"))
- .body(ARGUMENTS + ".description", containsString("{\"ids\":true}"));
+ .body(ARGUMENTS + ".description", containsString("(through reference chain: org.apache.james.jmap.draft.model.GetMailboxesRequest$Builder[\"ids\"])"));
}
@Category(BasicFeature.class)
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
index 1ecc01e..1e25586 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
@@ -889,7 +889,7 @@ public abstract class SetMessagesMethodTest {
.body(NOT_UPDATED + "[\"" + messageId + "\"].type", equalTo("invalidProperties"))
.body(NOT_UPDATED + "[\"" + messageId + "\"].properties[0]", equalTo("isUnread"))
.body(NOT_UPDATED + "[\"" + messageId + "\"].description", containsString("isUnread: Cannot deserialize value of type `java.lang.Boolean` from String \"123\": only \"true\" or \"false\" recognized"))
- .body(NOT_UPDATED + "[\"" + messageId + "\"].description", containsString("{\"isUnread\":\"123\"}"))
+ .body(NOT_UPDATED + "[\"" + messageId + "\"].description", containsString("(through reference chain: org.apache.james.jmap.draft.model.UpdateMessagePatch$Builder[\"isUnread\"])"))
.body(ARGUMENTS + ".updated", hasSize(0));
}
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParserImpl.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParserImpl.java
index 273efdd..5c77c2c 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParserImpl.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParserImpl.java
@@ -29,6 +29,7 @@ import org.apache.james.jmap.draft.model.InvocationRequest;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Preconditions;
public class JmapRequestParserImpl implements JmapRequestParser {
@@ -42,6 +43,8 @@ public class JmapRequestParserImpl implements JmapRequestParser {
@Override
public <T extends JmapRequest> T extractJmapRequest(InvocationRequest request, Class<T> requestClass)
throws IOException, JsonParseException, JsonMappingException {
- return objectMapper.readValue(request.getParameters().toString(), requestClass);
+ Preconditions.checkNotNull(requestClass, "requestClass should not be null");
+
+ return objectMapper.treeToValue(request.getParameters(), requestClass);
}
}
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidator.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidator.java
index da4264e..5701ba2 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidator.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidator.java
@@ -53,7 +53,7 @@ public class UpdateMessagePatchValidator implements Validator<ObjectNode> {
@Override
public Set<ValidationResult> validate(ObjectNode json) {
try {
- parser.readValue(json.toString(), UpdateMessagePatch.class);
+ parser.treeToValue(json, UpdateMessagePatch.class);
} catch (JsonMappingException e) {
return ImmutableSet.of(ValidationResult.builder()
.property(firstFieldFrom(e.getPath()).orElse(ValidationResult.UNDEFINED_PROPERTY))
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapRequestParserImplTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapRequestParserImplTest.java
index 2a64b59..7356d1e 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapRequestParserImplTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapRequestParserImplTest.java
@@ -19,6 +19,8 @@
package org.apache.james.jmap.draft.methods;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
import org.apache.james.jmap.draft.json.ObjectMapperFactory;
import org.apache.james.jmap.draft.model.InvocationRequest;
import org.apache.james.mailbox.inmemory.InMemoryId;
@@ -38,13 +40,14 @@ public class JmapRequestParserImplTest {
testee = new JmapRequestParserImpl(new ObjectMapperFactory(new InMemoryId.Factory(), new InMemoryMessageId.Factory()));
}
- @Test(expected = IllegalArgumentException.class)
- public void extractJmapRequestShouldThrowWhenNullRequestClass() throws Exception {
+ @Test
+ public void extractJmapRequestShouldThrowWhenNullRequestClass() {
JsonNode[] nodes = new JsonNode[] { new ObjectNode(new JsonNodeFactory(false)).textNode("unknwonMethod"),
new ObjectNode(new JsonNodeFactory(false)).putObject("{\"id\": \"id\"}"),
new ObjectNode(new JsonNodeFactory(false)).textNode("#1")};
- testee.extractJmapRequest(InvocationRequest.deserialize(nodes), null);
+ assertThatThrownBy(() -> testee.extractJmapRequest(InvocationRequest.deserialize(nodes), null))
+ .isInstanceOf(NullPointerException.class);
}
@Test
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidatorTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidatorTest.java
index 7355f3d..500cf0f 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidatorTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidatorTest.java
@@ -20,6 +20,7 @@
package org.apache.james.jmap.draft.methods;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
@@ -82,7 +83,7 @@ public class UpdateMessagePatchValidatorTest {
ObjectMapper mapper = mock(ObjectMapper.class);
JsonGenerator jsonGenerator = null;
- when(mapper.readValue(anyString(), eq(UpdateMessagePatch.class)))
+ when(mapper.treeToValue(any(), eq(UpdateMessagePatch.class)))
.thenThrow(JsonMappingException.from(jsonGenerator, "Exception when parsing"));
when(objectMapperFactory.forParsing())
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org