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 ro...@apache.org on 2019/03/04 15:03:37 UTC

[james-project] 01/02: JAMES-2578 Fix warning using Mailet new API

This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 802e9c1e9764e7472eff870a3a38fb2a48b7ac74
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Tue Feb 26 16:30:20 2019 +0100

    JAMES-2578 Fix warning using Mailet new API
---
 .../apache/james/ai/classic/BayesianAnalysis.java  |  7 ++++--
 .../james/transport/SMIMEAttributeNames.java       | 15 +++++-------
 .../james/transport/mailets/AbstractSign.java      |  8 ++++---
 .../transport/mailets/SMIMECheckSignature.java     | 17 +++++++------
 .../james/transport/mailets/SMIMEDecrypt.java      |  9 ++++---
 .../james/transport/mailets/ContactExtractor.java  | 12 +++++++---
 .../james/transport/mailets/SetMailAttribute.java  | 25 +++++++------------
 .../james/transport/mailets/BayesianAnalysis.java  |  7 ++++--
 .../james/transport/mailets/FromRepository.java    |  3 ++-
 .../org/apache/james/transport/mailets/SPF.java    | 11 +++++----
 .../transport/mailets/WithStorageDirective.java    | 20 +++++++++-------
 .../mailets/jsieve/delivery/SievePoster.java       |  3 ++-
 .../transport/mailets/remote/delivery/Bouncer.java |  7 ++++--
 .../apache/james/transport/matchers/dlp/Dlp.java   |  7 ++++--
 .../mailets/remote/delivery/BouncerTest.java       |  6 +++--
 .../apache/james/fetchmail/MessageProcessor.java   | 28 +++++++++++++---------
 .../james/jmap/mailet/filter/ActionApplier.java    |  3 ++-
 .../james/smtpserver/fastfail/SPFHandler.java      | 15 +++++++-----
 .../james/queue/activemq/ActiveMQMailQueue.java    |  5 ++--
 .../james/queue/activemq/ActiveMQSupport.java      |  4 ++--
 .../org/apache/james/queue/jms/JMSMailQueue.java   |  3 ++-
 21 files changed, 126 insertions(+), 89 deletions(-)

diff --git a/mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java b/mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java
index a91d178..e05ff98 100644
--- a/mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java
+++ b/mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java
@@ -33,6 +33,9 @@ import javax.mail.internet.MimeMessage;
 import javax.sql.DataSource;
 
 import org.apache.james.core.MailAddress;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Experimental;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.GenericMailet;
@@ -137,7 +140,7 @@ public class BayesianAnalysis extends GenericMailet {
 
     DataSource datasource;
 
-    private static final String MAIL_ATTRIBUTE_NAME = "org.apache.james.spam.probability";
+    private static final AttributeName MAIL_ATTRIBUTE_NAME = AttributeName.of("org.apache.james.spam.probability");
     private static final String HEADER_NAME = "X-MessageIsSpamProbability";
     static final long CORPUS_RELOAD_INTERVAL = 600000;
     private String headerName;
@@ -309,7 +312,7 @@ public class BayesianAnalysis extends GenericMailet {
                 probability = 0.0;
             }
 
-            mail.setAttribute(MAIL_ATTRIBUTE_NAME, probability);
+            mail.setAttribute(new Attribute(MAIL_ATTRIBUTE_NAME, AttributeValue.of(probability)));
             message.setHeader(headerName, Double.toString(probability));
 
             DecimalFormat probabilityForm = (DecimalFormat) DecimalFormat.getInstance();
diff --git a/mailet/crypto/src/main/java/org/apache/james/transport/SMIMEAttributeNames.java b/mailet/crypto/src/main/java/org/apache/james/transport/SMIMEAttributeNames.java
index b403ccd..7d2b231 100644
--- a/mailet/crypto/src/main/java/org/apache/james/transport/SMIMEAttributeNames.java
+++ b/mailet/crypto/src/main/java/org/apache/james/transport/SMIMEAttributeNames.java
@@ -21,6 +21,8 @@
 
 package org.apache.james.transport;
 
+import org.apache.mailet.AttributeName;
+
 /**
  * Contains some SMIME related mail attribute names of general use.
  *
@@ -32,23 +34,18 @@ public interface SMIMEAttributeNames {
     /**
      * The attribute contains the server-side signing mailet name as a String.
      */
-    String SMIME_SIGNING_MAILET = "org.apache.james.smime.signing.mailetname";
+    AttributeName SMIME_SIGNING_MAILET = AttributeName.of("org.apache.james.smime.signing.mailetname");
     
     /**
      * The attribute contains the string "valid" or the reason of non-validity of the signature.
      * The status could be non valid either because the signature does not verify
      * or because the certificate could be not valid when the signature was done.
      */
-    String SMIME_SIGNATURE_VALIDITY = "org.apache.james.smime.signature.validity";
+    AttributeName SMIME_SIGNATURE_VALIDITY = AttributeName.of("org.apache.james.smime.signature.validity");
     
     /**
      * The attribute contains the signer's mail address as a String.
      */
-    String SMIME_SIGNER_ADDRESS = "org.apache.james.smime.signer.address";
-    
-    /**
-     * The attribute contains the signature timestamp as a Date object.
-     */
-    String SMIME_SIGNING_TIME = "org.apache.james.smime.signing.time";
-    
+    AttributeName SMIME_SIGNER_ADDRESS = AttributeName.of("org.apache.james.smime.signer.address");
+
 }
diff --git a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
index 42bd5f2..1cff04c 100644
--- a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
+++ b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
@@ -40,7 +40,9 @@ import org.apache.james.transport.KeyHolder;
 import org.apache.james.transport.SMIMEAttributeNames;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.mailet.Attribute;
 import org.apache.mailet.AttributeUtils;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.GenericMailet;
 import org.apache.mailet.base.RFC2822Headers;
@@ -514,13 +516,13 @@ public abstract class AbstractSign extends GenericMailet {
             mail.setMessage(newMessage);
             
             // marks this mail as server-signed
-            mail.setAttribute(SMIMEAttributeNames.SMIME_SIGNING_MAILET, this.getClass().getName());
+            mail.setAttribute(new Attribute(SMIMEAttributeNames.SMIME_SIGNING_MAILET, AttributeValue.of(this.getClass().getName())));
             // it is valid for us by definition (signed here by us)
-            mail.setAttribute(SMIMEAttributeNames.SMIME_SIGNATURE_VALIDITY, "valid");
+            mail.setAttribute(new Attribute(SMIMEAttributeNames.SMIME_SIGNATURE_VALIDITY, AttributeValue.of("valid")));
             
             // saves the trusted server signer address
             // warning: should be same as the mail address in the certificate, but it is not guaranteed
-            mail.setAttribute(SMIMEAttributeNames.SMIME_SIGNER_ADDRESS, getKeyHolder().getSignerAddress());
+            mail.setAttribute(new Attribute(SMIMEAttributeNames.SMIME_SIGNER_ADDRESS, AttributeValue.of(getKeyHolder().getSignerAddress())));
             
             if (isDebug()) {
                 LOGGER.debug("Message signed, reverse-path: {}, Id: {}", mail.getMaybeSender().asString(), messageId);
diff --git a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMECheckSignature.java b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMECheckSignature.java
index 6fd176e..4f109b6 100644
--- a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMECheckSignature.java
+++ b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMECheckSignature.java
@@ -34,6 +34,9 @@ import javax.mail.internet.MimeMultipart;
 
 import org.apache.james.transport.KeyStoreHolder;
 import org.apache.james.transport.SMIMESignerInfo;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetConfig;
 import org.apache.mailet.base.GenericMailet;
@@ -103,13 +106,13 @@ import org.slf4j.LoggerFactory;
  */
 public class SMIMECheckSignature extends GenericMailet {
     private static final Logger LOGGER = LoggerFactory.getLogger(SMIMECheckSignature.class);
+
+    private KeyStoreHolder trustedCertificateStore;
     
-    protected KeyStoreHolder trustedCertificateStore;
-    
-    protected boolean stripSignature = false;
-    protected boolean onlyTrusted = true;
+    private boolean stripSignature = false;
+    private boolean onlyTrusted = true;
     
-    protected String mailAttribute = "org.apache.james.SMIMECheckSignature";
+    private AttributeName mailAttribute = AttributeName.of("org.apache.james.SMIMECheckSignature");
     
     public SMIMECheckSignature() {
         super();
@@ -132,7 +135,7 @@ public class SMIMECheckSignature extends GenericMailet {
         
         String mailAttributeConf = config.getInitParameter("mailAttribute");
         if (mailAttributeConf != null) {
-            mailAttribute = mailAttributeConf;
+            mailAttribute = AttributeName.of(mailAttributeConf);
         }
         
         
@@ -213,7 +216,7 @@ public class SMIMECheckSignature extends GenericMailet {
             }
 
             if (signerinfolist.size() > 0) {
-                mail.setAttribute(mailAttribute, signerinfolist);
+                mail.setAttribute(new Attribute(mailAttribute, AttributeValue.ofAny(signerinfolist)));
             } else {
                 // if no valid signers are found the message is not modified.
                 strippedMessage = null;
diff --git a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMEDecrypt.java b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMEDecrypt.java
index 2e2019b..df1d0fb 100644
--- a/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMEDecrypt.java
+++ b/mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMEDecrypt.java
@@ -35,6 +35,9 @@ import javax.mail.internet.MimeMessage;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.james.transport.SMIMEKeyHolder;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetConfig;
 import org.apache.mailet.base.GenericMailet;
@@ -79,7 +82,7 @@ public class SMIMEDecrypt extends GenericMailet {
 
     private SMIMEKeyHolder keyHolder;
     private X509CertificateHolder certificateHolder;
-    protected String mailAttribute = "org.apache.james.SMIMEDecrypt";
+    private AttributeName mailAttribute = AttributeName.of("org.apache.james.SMIMEDecrypt");
     
     @Override
     public void init() throws MessagingException {
@@ -101,7 +104,7 @@ public class SMIMEDecrypt extends GenericMailet {
         
         String mailAttributeConf = config.getInitParameter("mailAttribute");
         if (mailAttributeConf != null) {
-            mailAttribute = mailAttributeConf;
+            mailAttribute = AttributeName.of(mailAttributeConf);
         }
         
         try {
@@ -161,7 +164,7 @@ public class SMIMEDecrypt extends GenericMailet {
             // the result of the operation.
             ArrayList<X509Certificate> list = new ArrayList<>(1);
             list.add(keyHolder.getCertificate());
-            mail.setAttribute(mailAttribute, list);
+            mail.setAttribute(new Attribute(mailAttribute, AttributeValue.ofAny(list)));
 
             // I start the message stripping.
             try {
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
index 64e0524..02f0b9c 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
@@ -32,6 +32,9 @@ import javax.mail.internet.MimeMessage;
 import org.apache.james.core.MailAddress;
 import org.apache.james.mime4j.util.MimeUtil;
 import org.apache.james.util.StreamUtils;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.Mailet;
 import org.apache.mailet.MailetException;
@@ -73,12 +76,13 @@ public class ContactExtractor extends GenericMailet implements Mailet {
     private static final Logger LOGGER = LoggerFactory.getLogger(ContactExtractor.class);
 
     @VisibleForTesting ObjectMapper objectMapper;
-    private String extractAttributeTo;
+    private AttributeName extractAttributeTo;
 
     @Override
     public void init() throws MessagingException {
         extractAttributeTo = getInitParameterAsOptional(Configuration.ATTRIBUTE)
-                .orElseThrow(() -> new MailetException("No value for " + Configuration.ATTRIBUTE + " parameter was provided."));
+            .map(AttributeName::of)
+            .orElseThrow(() -> new MailetException("No value for " + Configuration.ATTRIBUTE + " parameter was provided."));
 
         objectMapper = new ObjectMapper().registerModule(new Jdk8Module());
     }
@@ -93,7 +97,9 @@ public class ContactExtractor extends GenericMailet implements Mailet {
         try {
             Optional<String> payload = extractContacts(mail);
             LOGGER.debug("payload : {}", payload);
-            payload.ifPresent(x -> mail.setAttribute(extractAttributeTo, x));
+            payload
+                .map(AttributeValue::of)
+                .ifPresent(x -> mail.setAttribute(new Attribute(extractAttributeTo, x)));
         } catch (Exception e) {
             LOGGER.error("Error while extracting contacts", e);
         }
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/SetMailAttribute.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/SetMailAttribute.java
index ea91948..3536650 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/SetMailAttribute.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/SetMailAttribute.java
@@ -21,16 +21,16 @@
 
 package org.apache.james.transport.mailets;
 
-import java.util.Iterator;
-import java.util.Map;
-
 import javax.mail.MessagingException;
 
+import org.apache.mailet.Attribute;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetException;
 import org.apache.mailet.base.GenericMailet;
 
-import com.google.common.collect.ImmutableMap;
+import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Streams;
 
 /**
  * <p>This mailet sets attributes on the Mail.</p>
@@ -47,7 +47,7 @@ import com.google.common.collect.ImmutableMap;
  */
 public class SetMailAttribute extends GenericMailet {
 
-    private ImmutableMap<String, String> entries;
+    private ImmutableList<Attribute> entries;
     
     @Override
     public String getMailetInfo() {
@@ -56,21 +56,14 @@ public class SetMailAttribute extends GenericMailet {
 
     @Override
     public void init() throws MailetException {
-        ImmutableMap.Builder<String, String> attributes = ImmutableMap.builder();
-        Iterator<String> iter = getInitParameterNames();
-        while (iter.hasNext()) {
-            String name = iter.next();
-            String value = getInitParameter(name);
-            attributes.put(name, value);
-        }
-        entries = attributes.build();
+        entries = Streams.stream(getInitParameterNames())
+            .map(name -> Attribute.convertToAttribute(name, getInitParameter(name)))
+            .collect(Guavate.toImmutableList());
     }
 
     @Override
     public void service(Mail mail) throws MessagingException {
-        for (Map.Entry<String, String> entry : entries.entrySet()) {
-            mail.setAttribute(entry.getKey(), entry.getValue());
-        }
+        entries.forEach(mail::setAttribute);
     }
     
 
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java
index bd84484..32af9f5 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/BayesianAnalysis.java
@@ -35,6 +35,9 @@ import org.apache.james.core.MailAddress;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.util.bayesian.JDBCBayesianAnalyzer;
 import org.apache.james.util.sql.JDBCUtil;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Experimental;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.GenericMailet;
@@ -142,7 +145,7 @@ public class BayesianAnalysis extends GenericMailet {
 
     private DataSource datasource;
 
-    private static final String MAIL_ATTRIBUTE_NAME = "org.apache.james.spam.probability";
+    private static final AttributeName MAIL_ATTRIBUTE_NAME = AttributeName.of("org.apache.james.spam.probability");
     private static final String HEADER_NAME = "X-MessageIsSpamProbability";
     private static final long CORPUS_RELOAD_INTERVAL = 600000;
     private String headerName;
@@ -316,7 +319,7 @@ public class BayesianAnalysis extends GenericMailet {
                 probability = 0.0;
             }
 
-            mail.setAttribute(MAIL_ATTRIBUTE_NAME, probability);
+            mail.setAttribute(new Attribute(MAIL_ATTRIBUTE_NAME, AttributeValue.of(probability)));
             message.setHeader(headerName, Double.toString(probability));
 
             DecimalFormat probabilityForm = (DecimalFormat) DecimalFormat.getInstance();
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/FromRepository.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/FromRepository.java
index 5a3d58e..f99d231 100755
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/FromRepository.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/FromRepository.java
@@ -32,6 +32,7 @@ import org.apache.james.mailrepository.api.MailRepository;
 import org.apache.james.mailrepository.api.MailRepositoryStore;
 import org.apache.james.mailrepository.api.MailRepositoryUrl;
 import org.apache.james.transport.mailets.managesieve.ManageSieveMailet;
+import org.apache.mailet.Attribute;
 import org.apache.mailet.Experimental;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.GenericMailet;
@@ -109,7 +110,7 @@ public class FromRepository extends GenericMailet {
                 if (mail != null && mail.getRecipients() != null) {
                     LOGGER.debug("Spooling mail {} from {}", mail.getName(), repositoryPath);
 
-                    mail.setAttribute("FromRepository", Boolean.TRUE);
+                    mail.setAttribute(Attribute.convertToAttribute("FromRepository", Boolean.TRUE));
                     mail.setState(processor);
                     getMailetContext().sendMail(mail);
                     if (delete) {
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
index 3c71efd..9cc4eae 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
@@ -26,6 +26,9 @@ import org.apache.james.jspf.core.Logger;
 import org.apache.james.jspf.executor.SPFResult;
 import org.apache.james.jspf.impl.DefaultSPF;
 import org.apache.james.transport.mailets.managesieve.ManageSieveMailet;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Experimental;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.GenericMailet;
@@ -57,8 +60,8 @@ public class SPF extends GenericMailet {
 
     private boolean addHeader = false;
     private org.apache.james.jspf.impl.SPF spf;
-    public static final String EXPLANATION_ATTRIBUTE = "org.apache.james.transport.mailets.spf.explanation";
-    public static final String RESULT_ATTRIBUTE = "org.apache.james.transport.mailets.spf.result";
+    private static final AttributeName EXPLANATION_ATTRIBUTE = AttributeName.of("org.apache.james.transport.mailets.spf.explanation");
+    private static final AttributeName RESULT_ATTRIBUTE = AttributeName.of("org.apache.james.transport.mailets.spf.result");
 
     @Override
     public void init() {
@@ -76,8 +79,8 @@ public class SPF extends GenericMailet {
         if (!remoteAddr.equals("127.0.0.1")) {
             String sender = mail.getMaybeSender().asString("");
             SPFResult result = spf.checkSPF(remoteAddr, sender, helo);
-            mail.setAttribute(EXPLANATION_ATTRIBUTE, result.getExplanation());
-            mail.setAttribute(RESULT_ATTRIBUTE, result.getResult());
+            mail.setAttribute(new Attribute(EXPLANATION_ATTRIBUTE, AttributeValue.of(result.getExplanation())));
+            mail.setAttribute(new Attribute(RESULT_ATTRIBUTE, AttributeValue.of(result.getResult())));
 
             LOGGER.debug("ip:{} from:{} helo:{} = {}", remoteAddr, sender, helo, result.getResult());
             if (addHeader) {
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithStorageDirective.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithStorageDirective.java
index 4070050..f6f1bbd 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithStorageDirective.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithStorageDirective.java
@@ -25,6 +25,9 @@ import javax.mail.MessagingException;
 import org.apache.james.core.MailAddress;
 import org.apache.james.transport.mailets.delivery.MailStore;
 import org.apache.james.user.api.UsersRepository;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.GenericMailet;
 
@@ -52,7 +55,7 @@ public class WithStorageDirective extends GenericMailet {
 
     private final UsersRepository usersRepository;
 
-    private String targetFolderName;
+    private AttributeValue<String> targetFolderName;
 
     @Inject
     public WithStorageDirective(UsersRepository usersRepository) {
@@ -61,12 +64,13 @@ public class WithStorageDirective extends GenericMailet {
 
     @Override
     public void init() throws MessagingException {
-        targetFolderName = getInitParameter(TARGET_FOLDER_NAME);
-        validateMailetConfiguration();
+        targetFolderName = AttributeValue.of(validateMailetConfiguration(TARGET_FOLDER_NAME));
     }
 
-    public void validateMailetConfiguration() {
-        Preconditions.checkState(!Strings.isNullOrEmpty(targetFolderName), "You need to specify " + TARGET_FOLDER_NAME);
+    private String validateMailetConfiguration(String initParameterName) {
+        String initParameterValue = getInitParameter(initParameterName);
+        Preconditions.checkState(!Strings.isNullOrEmpty(initParameterValue), "You need to specify " + initParameterName);
+        return initParameterValue;
     }
 
     @Override
@@ -77,10 +81,8 @@ public class WithStorageDirective extends GenericMailet {
 
     public ThrowingConsumer<MailAddress> addStorageDirective(Mail mail) {
         return recipient -> {
-            String attributeNameForUser = MailStore.DELIVERY_PATH_PREFIX + usersRepository.getUser(recipient);
-            mail.setAttribute(
-                attributeNameForUser,
-                targetFolderName);
+            AttributeName attributeNameForUser = AttributeName.of(MailStore.DELIVERY_PATH_PREFIX + usersRepository.getUser(recipient));
+            mail.setAttribute(new Attribute(attributeNameForUser, targetFolderName));
         };
 
     }
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java
index f7099b8..8a3b486 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java
@@ -28,6 +28,7 @@ import org.apache.james.transport.mailets.delivery.MailStore;
 import org.apache.james.transport.mailets.jsieve.Poster;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.mailet.Attribute;
 import org.apache.mailet.Mail;
 
 public class SievePoster implements Poster {
@@ -49,7 +50,7 @@ public class SievePoster implements Poster {
             if (scheme.equals("mailbox")) {
                 UserAndPath userAndPath = retrieveUserAndPath(url, endOfScheme);
 
-                mail.setAttribute(MailStore.DELIVERY_PATH_PREFIX + userAndPath.user, userAndPath.path);
+                mail.setAttribute(Attribute.convertToAttribute(MailStore.DELIVERY_PATH_PREFIX + userAndPath.user, userAndPath.path));
             } else {
                 throw new MessagingException("Unsupported protocol");
             }
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java
index 43cfce3..f2d1d3f 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java
@@ -29,6 +29,9 @@ import javax.mail.MessagingException;
 import javax.mail.SendFailedException;
 
 import org.apache.james.core.MailAddress;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetContext;
 import org.slf4j.Logger;
@@ -37,7 +40,7 @@ import org.slf4j.LoggerFactory;
 public class Bouncer {
     private static final Logger LOGGER = LoggerFactory.getLogger(Bouncer.class);
 
-    public static final String DELIVERY_ERROR = "delivery-error";
+    public static final AttributeName DELIVERY_ERROR = AttributeName.of("delivery-error");
     private final RemoteDeliveryConfiguration configuration;
     private final MailetContext mailetContext;
 
@@ -51,7 +54,7 @@ public class Bouncer {
             LOGGER.debug("Null Sender: no bounce will be generated for {}", mail.getName());
         } else {
             if (configuration.getBounceProcessor() != null) {
-                mail.setAttribute(DELIVERY_ERROR, getErrorMsg(ex));
+                mail.setAttribute(new Attribute(DELIVERY_ERROR, AttributeValue.of(getErrorMsg(ex))));
                 try {
                     mailetContext.sendMail(mail, configuration.getBounceProcessor());
                 } catch (MessagingException e) {
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java
index 4257c3b..945b170 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java
@@ -27,6 +27,9 @@ import javax.inject.Inject;
 import org.apache.james.core.MailAddress;
 import org.apache.james.dlp.api.DLPConfigurationItem;
 import org.apache.james.dlp.api.DLPConfigurationStore;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.GenericMatcher;
 
@@ -35,7 +38,7 @@ import com.google.common.collect.ImmutableList;
 
 public class Dlp extends GenericMatcher {
 
-    public static final String DLP_MATCHED_RULE = "DlpMatchedRule";
+    private static final AttributeName DLP_MATCHED_RULE = AttributeName.of("DlpMatchedRule");
 
     private final DlpRulesLoader rulesLoader;
 
@@ -62,7 +65,7 @@ public class Dlp extends GenericMatcher {
     }
 
     private void setRuleIdAsMailAttribute(Mail mail, DLPConfigurationItem.Id ruleId) {
-        mail.setAttribute(DLP_MATCHED_RULE, ruleId.asString());
+        mail.setAttribute(new Attribute(DLP_MATCHED_RULE, AttributeValue.of(ruleId.asString())));
     }
 
     private Optional<DLPConfigurationItem.Id> findFirstMatchingRule(Mail mail) {
diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/BouncerTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/BouncerTest.java
index 9c1b289..723adfb 100644
--- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/BouncerTest.java
+++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/BouncerTest.java
@@ -34,6 +34,8 @@ import javax.mail.SendFailedException;
 import org.apache.james.domainlist.api.DomainList;
 import org.apache.james.transport.mailets.remote.delivery.Bouncer;
 import org.apache.james.transport.mailets.remote.delivery.RemoteDeliveryConfiguration;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.MailAddressFixture;
 import org.apache.mailet.base.test.FakeMail;
@@ -344,7 +346,7 @@ public class BouncerTest {
 
         FakeMailContext.SentMail expected = FakeMailContext.sentMailBuilder()
             .sender(MailAddressFixture.ANY_AT_JAMES)
-            .attribute(DELIVERY_ERROR, errorMessage)
+            .attribute(new Attribute(DELIVERY_ERROR, AttributeValue.of(errorMessage)))
             .state(BOUNCE_PROCESSOR)
             .fromMailet()
             .build();
@@ -446,7 +448,7 @@ public class BouncerTest {
 
         FakeMailContext.SentMail expected = FakeMailContext.sentMailBuilder()
             .sender(MailAddressFixture.ANY_AT_JAMES)
-            .attribute(DELIVERY_ERROR, "null")
+            .attribute(new Attribute(DELIVERY_ERROR, AttributeValue.of("null")))
             .state(BOUNCE_PROCESSOR)
             .fromMailet()
             .build();
diff --git a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java
index 1adb19b..49c374b 100644
--- a/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java
+++ b/server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java
@@ -34,6 +34,9 @@ import org.apache.james.core.MailAddress;
 import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.server.core.MailImpl;
 import org.apache.james.user.api.UsersRepositoryException;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.RFC2822Headers;
 import org.slf4j.Logger;
@@ -1230,44 +1233,44 @@ public class MessageProcessor extends ProcessorAbstract {
      * @param aMail a Mail instance
      */
     protected void addMailAttributes(Mail aMail) throws MessagingException {
-        aMail.setAttribute(getAttributePrefix() + "taskName", getFetchTaskName());
+        aMail.setAttribute(new Attribute(makeAttributeName("taskName"), AttributeValue.of(getFetchTaskName())));
 
-        aMail.setAttribute(getAttributePrefix() + "folderName", getMessageIn().getFolder().getFullName());
+        aMail.setAttribute(new Attribute(makeAttributeName("folderName"), AttributeValue.of(getMessageIn().getFolder().getFullName())));
 
         if (isRemoteRecipient()) {
-            aMail.setAttribute(getAttributePrefix() + "isRemoteRecipient", null);
+            aMail.setAttribute(new Attribute(makeAttributeName("isRemoteRecipient"), AttributeValue.of(true)));
         }
 
         if (isUserUndefined()) {
-            aMail.setAttribute(getAttributePrefix() + "isUserUndefined", true);
+            aMail.setAttribute(new Attribute(makeAttributeName("isUserUndefined"), AttributeValue.of(true)));
         }
 
         if (isBlacklistedRecipient()) {
-            aMail.setAttribute(getAttributePrefix() + "isBlacklistedRecipient", true);
+            aMail.setAttribute(new Attribute(makeAttributeName("isBlacklistedRecipient"), AttributeValue.of(true)));
         }
 
         if (isRecipientNotFound()) {
-            aMail.setAttribute(getAttributePrefix() + "isRecipientNotFound", true);
+            aMail.setAttribute(new Attribute(makeAttributeName("isRecipientNotFound"), AttributeValue.of(true)));
         }
 
         if (isMaxMessageSizeExceeded()) {
-            aMail.setAttribute(getAttributePrefix() + "isMaxMessageSizeExceeded", Integer.toString(getMessageIn().getSize()));
+            aMail.setAttribute(new Attribute(makeAttributeName("isMaxMessageSizeExceeded"), AttributeValue.of(Integer.toString(getMessageIn().getSize()))));
         }
 
         if (isRemoteReceivedHeaderInvalid()) {
-            aMail.setAttribute(getAttributePrefix() + "isRemoteReceivedHeaderInvalid", true);
+            aMail.setAttribute(new Attribute(makeAttributeName("isRemoteReceivedHeaderInvalid"), AttributeValue.of(true)));
         }
 
         if (isDefaultSenderLocalPart()) {
-            aMail.setAttribute(getAttributePrefix() + "isDefaultSenderLocalPart", true);
+            aMail.setAttribute(new Attribute(makeAttributeName("isDefaultSenderLocalPart"), AttributeValue.of(true)));
         }
 
         if (isDefaultSenderDomainPart()) {
-            aMail.setAttribute(getAttributePrefix() + "isDefaultSenderDomainPart", true);
+            aMail.setAttribute(new Attribute(makeAttributeName("isDefaultSenderDomainPart"), AttributeValue.of(true)));
         }
 
         if (isDefaultRemoteAddress()) {
-            aMail.setAttribute(getAttributePrefix() + "isDefaultRemoteAddress", true);
+            aMail.setAttribute(new Attribute(makeAttributeName("isDefaultRemoteAddress"), AttributeValue.of(true)));
         }
     }
 
@@ -1650,4 +1653,7 @@ public class MessageProcessor extends ProcessorAbstract {
         fieldDefaultRemoteAddress = defaultRemoteAddress;
     }
 
+    private AttributeName makeAttributeName(String suffix) {
+        return AttributeName.of(getAttributePrefix() + suffix);
+    }
 }
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java
index 72376ab..8c2e63e 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java
@@ -30,6 +30,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.model.MailboxId;
+import org.apache.mailet.Attribute;
 import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -98,7 +99,7 @@ public class ActionApplier {
 
             String mailboxName = messageManager.getMailboxPath().getName();
             String attributeNameForUser = DELIVERY_PATH_PREFIX + user.asString();
-            mail.setAttribute(attributeNameForUser, mailboxName);
+            mail.setAttribute(Attribute.convertToAttribute(attributeNameForUser, mailboxName));
         } catch (MailboxNotFoundException e) {
             LOGGER.info("Mailbox {} does not exist, but it was mentioned in a JMAP filtering rule", mailboxId, e);
         } catch (Exception e) {
diff --git a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/SPFHandler.java b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/SPFHandler.java
index 1d136ab..0bb898b 100644
--- a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/SPFHandler.java
+++ b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/SPFHandler.java
@@ -39,6 +39,9 @@ import org.apache.james.protocols.smtp.hook.HookReturnCode;
 import org.apache.james.protocols.smtp.hook.MailHook;
 import org.apache.james.protocols.smtp.hook.RcptHook;
 import org.apache.james.smtpserver.JamesMessageHook;
+import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeName;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -56,15 +59,15 @@ public class SPFHandler implements JamesMessageHook, MailHook, RcptHook, Protoco
      */
     private final Logger serviceLog = FALLBACK_LOG;
 
-    public static final String SPF_BLOCKLISTED = "SPF_BLOCKLISTED";
+    private static final String SPF_BLOCKLISTED = "SPF_BLOCKLISTED";
 
-    public static final String SPF_DETAIL = "SPF_DETAIL";
+    private static final String SPF_DETAIL = "SPF_DETAIL";
 
-    public static final String SPF_TEMPBLOCKLISTED = "SPF_TEMPBLOCKLISTED";
+    private static final String SPF_TEMPBLOCKLISTED = "SPF_TEMPBLOCKLISTED";
 
-    public static final String SPF_HEADER = "SPF_HEADER";
+    private static final String SPF_HEADER = "SPF_HEADER";
 
-    public static final String SPF_HEADER_MAIL_ATTRIBUTE_NAME = "org.apache.james.spf.header";
+    private static final AttributeName SPF_HEADER_MAIL_ATTRIBUTE_NAME = AttributeName.of("org.apache.james.spf.header");
 
     /** If set to true the mail will also be rejected on a softfail */
     private boolean blockSoftFail = false;
@@ -274,7 +277,7 @@ public class SPFHandler implements JamesMessageHook, MailHook, RcptHook, Protoco
     @Override
     public HookResult onMessage(SMTPSession session, Mail mail) {
         // Store the spf header as attribute for later using
-        mail.setAttribute(SPF_HEADER_MAIL_ATTRIBUTE_NAME, (String) session.getAttachment(SPF_HEADER, State.Transaction));
+        mail.setAttribute(new Attribute(SPF_HEADER_MAIL_ATTRIBUTE_NAME, AttributeValue.of((String) session.getAttachment(SPF_HEADER, State.Transaction))));
 
         return null;
     }
diff --git a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
index d072828..c6e094b 100644
--- a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
+++ b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueue.java
@@ -50,6 +50,7 @@ import org.apache.james.server.core.MimeMessageCopyOnWriteProxy;
 import org.apache.james.server.core.MimeMessageInputStream;
 import org.apache.james.server.core.MimeMessageSource;
 import org.apache.mailet.Attribute;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -122,8 +123,8 @@ public class ActiveMQMailQueue extends JMSMailQueue implements ActiveMQSupport {
             BlobMessage blobMessage = (BlobMessage) message;
             try {
                 // store URL and queueName for later usage
-                builder.addAttribute(Attribute.convertToAttribute(JAMES_BLOB_URL, blobMessage.getURL()));
-                builder.addAttribute(Attribute.convertToAttribute(JAMES_QUEUE_NAME, queueName));
+                builder.addAttribute(new Attribute(JAMES_BLOB_URL, AttributeValue.of(blobMessage.getURL())));
+                builder.addAttribute(new Attribute(JAMES_QUEUE_NAME, AttributeValue.of(queueName)));
             } catch (MalformedURLException e) {
                 // Ignore on error
                 LOGGER.debug("Unable to get url from blobmessage for mail");
diff --git a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQSupport.java b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQSupport.java
index 56841fa..a2c4da1 100644
--- a/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQSupport.java
+++ b/server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQSupport.java
@@ -29,12 +29,12 @@ public interface ActiveMQSupport extends JMSSupport {
     /**
      * The name of the Queue the mail is stored in
      */
-    String JAMES_QUEUE_NAME = "JAMES_QUEUE_NAME";
+    AttributeName JAMES_QUEUE_NAME = AttributeName.of("JAMES_QUEUE_NAME");
 
     /**
      * The URL of the Blobmessage content
      */
-    String JAMES_BLOB_URL = "JAMES_BLOB_URL";
+    AttributeName JAMES_BLOB_URL = AttributeName.of("JAMES_BLOB_URL");
 
     /**
      * Indicate that the Blobmessage content is reused for a new message
diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
index eb57b38..aea5ef4 100644
--- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
+++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueue.java
@@ -70,6 +70,7 @@ import org.apache.james.util.SerializationUtil;
 import org.apache.mailet.Attribute;
 import org.apache.mailet.AttributeName;
 import org.apache.mailet.AttributeUtils;
+import org.apache.mailet.AttributeValue;
 import org.apache.mailet.Mail;
 import org.apache.mailet.PerRecipientHeaders;
 import org.slf4j.Logger;
@@ -438,7 +439,7 @@ public class JMSMailQueue implements ManageableMailQueue, JMSSupport, MailPriori
         Object attrValue = Throwing.function(message::getObjectProperty).apply(name);
 
         if (attrValue instanceof String) {
-            return Stream.of(Attribute.convertToAttribute(name, SerializationUtil.deserialize((String) attrValue)));
+            return Stream.of(new Attribute(AttributeName.of(name), AttributeValue.ofAny(SerializationUtil.deserialize((String) attrValue))));
         } else {
             LOGGER.error("Not supported mail attribute {} of type {} for mail {}", name, attrValue, name);
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org