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 <[email protected]> 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", "<[email protected]>") .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 <user@domain>") .put("To", "user1 <user1@domain>, user2 <user2@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 <user1@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: [email protected] For additional commands, e-mail: [email protected]
