You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2022/10/17 03:11:58 UTC
[james-mime4j] 08/14: MIME4J-318 DefaultBodyDescriptorBuilder should avoid copying all headers
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org