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-mime4j.git
commit 2f53da3849ae04866c411e431ace3835df80765e Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Tue Jun 21 11:46:55 2022 +0700 MIME4J-318 DefaultBodyDescriptorBuilder should avoid copying all headers It only need to copy headers describing body content. JMHLongMultipartReadBench.benchmark4 avgt 10 41.344 ± 1.121 us/op JMHLongMultipartReadBench.benchmark4:·gc.alloc.rate avgt 10 609.846 ± 16.101 MB/sec JMHLongMultipartReadBench.benchmark4 avgt 10 39.936 ± 1.612 us/op JMHLongMultipartReadBench.benchmark4:·gc.alloc.rate avgt 10 611.421 ± 23.750 MB/sec --- .../org/apache/james/mime4j/dom/field/ContentDescriptionField.java | 4 ++++ .../org/apache/james/mime4j/dom/field/ContentDispositionField.java | 4 ++++ .../main/java/org/apache/james/mime4j/dom/field/ContentIdField.java | 4 ++++ .../java/org/apache/james/mime4j/dom/field/ContentLanguageField.java | 4 ++++ .../java/org/apache/james/mime4j/dom/field/ContentLengthField.java | 4 ++++ .../java/org/apache/james/mime4j/dom/field/ContentLocationField.java | 4 ++++ .../main/java/org/apache/james/mime4j/dom/field/ContentMD5Field.java | 4 ++++ .../apache/james/mime4j/dom/field/ContentTransferEncodingField.java | 4 ++++ .../main/java/org/apache/james/mime4j/dom/field/ContentTypeField.java | 4 ++++ .../main/java/org/apache/james/mime4j/dom/field/MimeVersionField.java | 4 ++++ dom/src/main/java/org/apache/james/mime4j/dom/field/ParsedField.java | 4 ++++ .../org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java | 2 +- 12 files changed, 45 insertions(+), 1 deletion(-) diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentDescriptionField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentDescriptionField.java index 10667501..f5dac1b3 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentDescriptionField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentDescriptionField.java @@ -21,6 +21,10 @@ package org.apache.james.mime4j.dom.field; public interface ContentDescriptionField extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + /** * Gets the content description defined in this field. * diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentDispositionField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentDispositionField.java index 3a0699cc..4d960f14 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentDispositionField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentDispositionField.java @@ -24,6 +24,10 @@ import java.util.Map; public interface ContentDispositionField extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + /** The <code>inline</code> disposition type. */ String DISPOSITION_TYPE_INLINE = "inline"; /** The <code>attachment</code> disposition type. */ diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentIdField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentIdField.java index 4df74309..d86d29c9 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentIdField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentIdField.java @@ -21,6 +21,10 @@ package org.apache.james.mime4j.dom.field; public interface ContentIdField extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + /** * Gets the content ID defined in this field. * diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLanguageField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLanguageField.java index 6270a088..38ca1371 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLanguageField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLanguageField.java @@ -23,6 +23,10 @@ import java.util.List; public interface ContentLanguageField extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + /** * Gets the content language(s) defined in this field. * diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLengthField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLengthField.java index 906566cb..8b4ff0d2 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLengthField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLengthField.java @@ -21,6 +21,10 @@ package org.apache.james.mime4j.dom.field; public interface ContentLengthField extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + /** * Gets the content length value defined in this field. * diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLocationField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLocationField.java index fd22088d..352134d8 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLocationField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentLocationField.java @@ -21,6 +21,10 @@ package org.apache.james.mime4j.dom.field; public interface ContentLocationField extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + /** * Gets the content location defined in this field. * diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentMD5Field.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentMD5Field.java index 1a445638..607eec0c 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentMD5Field.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentMD5Field.java @@ -21,6 +21,10 @@ package org.apache.james.mime4j.dom.field; public interface ContentMD5Field extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + /** * Gets the content MD5 raw value defined in this field. * diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentTransferEncodingField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentTransferEncodingField.java index b0a24a8d..3a6b942c 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentTransferEncodingField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentTransferEncodingField.java @@ -21,6 +21,10 @@ package org.apache.james.mime4j.dom.field; public interface ContentTransferEncodingField extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + /** * Gets the encoding defined in this field. * diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentTypeField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentTypeField.java index 2a5670f5..6b8cad88 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentTypeField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ContentTypeField.java @@ -23,6 +23,10 @@ import java.util.Map; public interface ContentTypeField extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + /** The prefix of all <code>multipart</code> MIME types. */ String TYPE_MULTIPART_PREFIX = "multipart/"; /** The <code>multipart/digest</code> MIME type. */ diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/MimeVersionField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/MimeVersionField.java index 48b80590..ad891fdc 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/MimeVersionField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/MimeVersionField.java @@ -21,6 +21,10 @@ package org.apache.james.mime4j.dom.field; public interface MimeVersionField extends ParsedField { + default boolean bodyDescriptionField() { + return true; + } + int getMinorVersion(); int getMajorVersion(); diff --git a/dom/src/main/java/org/apache/james/mime4j/dom/field/ParsedField.java b/dom/src/main/java/org/apache/james/mime4j/dom/field/ParsedField.java index 1e58101f..40410901 100644 --- a/dom/src/main/java/org/apache/james/mime4j/dom/field/ParsedField.java +++ b/dom/src/main/java/org/apache/james/mime4j/dom/field/ParsedField.java @@ -26,6 +26,10 @@ import org.apache.james.mime4j.stream.Field; */ public interface ParsedField extends Field { + default boolean bodyDescriptionField() { + return false; + } + /** * Returns <code>true</code> if this field is valid, i.e. no errors were * encountered while parsing the field value. diff --git a/dom/src/main/java/org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java b/dom/src/main/java/org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java index de8d5a21..f44cea99 100644 --- a/dom/src/main/java/org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java +++ b/dom/src/main/java/org/apache/james/mime4j/message/DefaultBodyDescriptorBuilder.java @@ -89,7 +89,7 @@ public class DefaultBodyDescriptorBuilder implements BodyDescriptorBuilder { public Field addField(final RawField rawfield) throws MimeException { ParsedField field = fieldParser.parse(rawfield, monitor); String name = field.getNameLowerCase(); - if (!fields.containsKey(name)) { + if (field.bodyDescriptionField() && !fields.containsKey(name)) { fields.put(name, field); } return field; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org