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

Reply via email to