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/06/26 05:06:19 UTC
[james-project] 01/06: [PERFORMANCE] Prefer DefaultMessageBuilder
for Mime message parsing
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 f458b0fce276391d43084fe2ebce5a0317ddae0f
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Jun 21 13:00:48 2021 +0700
[PERFORMANCE] Prefer DefaultMessageBuilder for Mime message parsing
This saves the call to Message.Builder::build wich does a copy of all
messages fields.
---
.../src/main/java/org/apache/james/jmap/api/model/Preview.java | 8 ++++----
.../james/jmap/draft/model/message/view/MessageViewFactory.java | 9 ++++-----
.../apache/james/jmap/event/PopulateEmailQueryViewListener.java | 9 ++++-----
.../draft/model/message/view/MessageFullViewFactoryTest.java | 7 ++-----
.../apache/james/webadmin/data/jmap/EmailQueryViewPopulator.java | 9 ++++-----
.../src/main/java/org/apache/james/webadmin/dto/MailDto.java | 9 ++++-----
6 files changed, 22 insertions(+), 29 deletions(-)
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Preview.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Preview.java
index e26dbba..c0cc914 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Preview.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Preview.java
@@ -31,6 +31,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MessageResult;
import org.apache.james.mime4j.dom.Message;
+import org.apache.james.mime4j.message.DefaultMessageBuilder;
import org.apache.james.mime4j.stream.MimeConfig;
import org.apache.james.util.html.HtmlTextExtractor;
import org.apache.james.util.mime.MessageContentExtractor;
@@ -72,10 +73,9 @@ public class Preview {
}
private Message parse(InputStream inputStream) throws IOException {
- return Message.Builder.of()
- .use(MimeConfig.PERMISSIVE)
- .parse(inputStream)
- .build();
+ DefaultMessageBuilder defaultMessageBuilder = new DefaultMessageBuilder();
+ defaultMessageBuilder.setMimeEntityConfig(MimeConfig.PERMISSIVE);
+ return defaultMessageBuilder.parseMessage(inputStream);
}
}
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java
index 5a8130a..a720019 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java
@@ -43,6 +43,7 @@ import org.apache.james.mailbox.model.MessageResult;
import org.apache.james.mime4j.codec.DecodeMonitor;
import org.apache.james.mime4j.codec.DecoderUtil;
import org.apache.james.mime4j.dom.Message;
+import org.apache.james.mime4j.message.DefaultMessageBuilder;
import org.apache.james.mime4j.stream.Field;
import org.apache.james.mime4j.stream.MimeConfig;
import org.apache.james.util.ReactorUtils;
@@ -152,11 +153,9 @@ public interface MessageViewFactory<T extends MessageView> {
}
static Message parse(InputStream messageContent) throws IOException {
- return Message.Builder
- .of()
- .use(MimeConfig.PERMISSIVE)
- .parse(messageContent)
- .build();
+ DefaultMessageBuilder defaultMessageBuilder = new DefaultMessageBuilder();
+ defaultMessageBuilder.setMimeEntityConfig(MimeConfig.PERMISSIVE);
+ return defaultMessageBuilder.parseMessage(messageContent);
}
}
}
diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java
index 722cd52..47a033a 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java
@@ -48,6 +48,7 @@ import org.apache.james.mailbox.model.MessageMetaData;
import org.apache.james.mailbox.model.MessageResult;
import org.apache.james.mailbox.model.UpdatedFlags;
import org.apache.james.mime4j.dom.Message;
+import org.apache.james.mime4j.message.DefaultMessageBuilder;
import org.apache.james.mime4j.stream.MimeConfig;
import org.reactivestreams.Publisher;
@@ -169,10 +170,8 @@ public class PopulateEmailQueryViewListener implements ReactiveGroupEventListene
}
private Message parseMessage(MessageResult messageResult) throws IOException, MailboxException {
- return Message.Builder
- .of()
- .use(MimeConfig.PERMISSIVE)
- .parse(messageResult.getFullContent().getInputStream())
- .build();
+ DefaultMessageBuilder defaultMessageBuilder = new DefaultMessageBuilder();
+ defaultMessageBuilder.setMimeEntityConfig(MimeConfig.PERMISSIVE);
+ return defaultMessageBuilder.parseMessage(messageResult.getFullContent().getInputStream());
}
}
diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
index cbc1165..7882698 100644
--- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
+++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
@@ -186,7 +186,7 @@ class MessageFullViewFactoryTest {
MessageFullView testee = messageFullViewFactory.fromMetaDataWithContent(testMail).block();
assertThat(testee)
.extracting(MessageFullView::getPreview, MessageFullView::getSize, MessageFullView::getSubject, MessageFullView::getHeaders, MessageFullView::getDate)
- .containsExactly(PreviewDTO.of(""), Number.ZERO, "", ImmutableMap.of("MIME-Version", "1.0"), INTERNAL_DATE);
+ .containsExactly(PreviewDTO.of(""), Number.ZERO, "", ImmutableMap.of(), INTERNAL_DATE);
}
@Test
@@ -246,7 +246,6 @@ class MessageFullViewFactoryTest {
.put("In-Reply-To", "<SN...@phx.gbl>")
.put("Other-header", "other header value")
.put("Date", "Tue, 14 Jul 2015 12:30:42 +0000")
- .put("MIME-Version", "1.0")
.build();
MessageFullView testee = messageFullViewFactory.fromMetaDataWithContent(testMail).block();
@@ -302,7 +301,6 @@ class MessageFullViewFactoryTest {
.put("Subject", "test subject")
.put("From", "user <us...@domain>")
.put("To", "user1 <us...@domain>, user2 <us...@domain>")
- .put("MIME-Version", "1.0")
.build();
MessageFullView testee = messageFullViewFactory.fromMetaDataWithContent(testMail).block();
MessageFullView expected = MessageFullView.builder()
@@ -353,7 +351,6 @@ class MessageFullViewFactoryTest {
.put("Subject", "test subject")
.put("Multi-header", "first value\nsecond value")
.put("To", "user1 <us...@domain>")
- .put("MIME-Version", "1.0")
.build();
MessageFullView testee = messageFullViewFactory.fromMetaDataWithContent(testMail).block();
MessageFullView expected = MessageFullView.builder()
@@ -657,7 +654,7 @@ class MessageFullViewFactoryTest {
MessageFullView testee = messageFullViewFactory.fromMetaDataWithContent(testMail).block();
assertThat(testee)
.extracting(MessageFullView::getPreview, MessageFullView::getSize, MessageFullView::getSubject, MessageFullView::getHeaders, MessageFullView::getDate)
- .containsExactly(PreviewDTO.of(""), Number.fromLong(1010L), "", ImmutableMap.of("MIME-Version", "1.0"), INTERNAL_DATE);
+ .containsExactly(PreviewDTO.of(""), Number.fromLong(1010L), "", ImmutableMap.of(), INTERNAL_DATE);
}
@Test
diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/EmailQueryViewPopulator.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/EmailQueryViewPopulator.java
index 76c1e0e..9b22911 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/EmailQueryViewPopulator.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/EmailQueryViewPopulator.java
@@ -45,6 +45,7 @@ import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MessageResult;
import org.apache.james.mailbox.model.search.MailboxQuery;
import org.apache.james.mime4j.dom.Message;
+import org.apache.james.mime4j.message.DefaultMessageBuilder;
import org.apache.james.mime4j.stream.MimeConfig;
import org.apache.james.task.Task;
import org.apache.james.task.Task.Result;
@@ -204,10 +205,8 @@ public class EmailQueryViewPopulator {
}
private Message parseMessage(MessageResult messageResult) throws IOException, MailboxException {
- return Message.Builder
- .of()
- .use(MimeConfig.PERMISSIVE)
- .parse(messageResult.getFullContent().getInputStream())
- .build();
+ DefaultMessageBuilder defaultMessageBuilder = new DefaultMessageBuilder();
+ defaultMessageBuilder.setMimeEntityConfig(MimeConfig.PERMISSIVE);
+ return defaultMessageBuilder.parseMessage(messageResult.getFullContent().getInputStream());
}
}
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java
index f0589f0..e369a1b 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java
@@ -34,6 +34,7 @@ import javax.mail.internet.MimeMessage;
import org.apache.james.core.MailAddress;
import org.apache.james.mime4j.dom.Message;
+import org.apache.james.mime4j.message.DefaultMessageBuilder;
import org.apache.james.mime4j.stream.MimeConfig;
import org.apache.james.mime4j.util.MimeUtil;
import org.apache.james.server.core.MimeMessageInputStream;
@@ -113,11 +114,9 @@ public class MailDto {
}
private static Message convertMessage(MimeMessage message) throws IOException, MessagingException {
- return Message.Builder
- .of()
- .use(MimeConfig.PERMISSIVE)
- .parse(new MimeMessageInputStream(message))
- .build();
+ DefaultMessageBuilder defaultMessageBuilder = new DefaultMessageBuilder();
+ defaultMessageBuilder.setMimeEntityConfig(MimeConfig.PERMISSIVE);
+ return defaultMessageBuilder.parseMessage(new MimeMessageInputStream(message));
}
private static Optional<HeadersDto> fetchHeaders(Set<AdditionalField> additionalFields, Mail mail) throws InaccessibleFieldException {
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org