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 2016/08/29 13:38:08 UTC
[5/6] james-project git commit: MAILET-99 Refactor LogMessage
MAILET-99 Refactor LogMessage
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/08eb7ec6
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/08eb7ec6
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/08eb7ec6
Branch: refs/heads/master
Commit: 08eb7ec6d41da8aa9e34e421110faea1cfeead31
Parents: 00ce982
Author: Antoine Duprat <ad...@linagora.com>
Authored: Thu Aug 25 16:02:02 2016 +0200
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Mon Aug 29 14:54:34 2016 +0200
----------------------------------------------------------------------
.../james/transport/mailets/LogMessage.java | 74 +++++++++++---------
.../james/transport/mailets/LogMessageTest.java | 32 +++++----
2 files changed, 59 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/08eb7ec6/mailet/standard/src/main/java/org/apache/james/transport/mailets/LogMessage.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/LogMessage.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/LogMessage.java
index ba3a35d..c1c065f 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/LogMessage.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/LogMessage.java
@@ -21,15 +21,20 @@
package org.apache.james.transport.mailets;
+import java.io.IOException;
import java.io.InputStream;
+import java.util.Collections;
import java.util.Enumeration;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
+import org.apache.commons.io.IOUtils;
import org.apache.mailet.Mail;
import org.apache.mailet.base.GenericMailet;
+import com.google.common.io.ByteStreams;
+
/**
* Logs Message Headers and/or Body.
* If the "passThrough" in confs is true the mail will be left untouched in
@@ -49,15 +54,15 @@ public class LogMessage extends GenericMailet {
private int bodyMax = 0;
private String comment = null;
+ @Override
public void init() {
try {
- passThrough = (getInitParameter("passThrough") == null) ? true : Boolean.valueOf(getInitParameter("passThrough"));
- headers = (getInitParameter("headers") == null) ? true : Boolean.valueOf(getInitParameter("headers"));
- body = (getInitParameter("body") == null) ? true : Boolean.valueOf(getInitParameter("body"));
+ passThrough = getInitParameter("passThrough", true);
+ headers = getInitParameter("headers", true);
+ body = getInitParameter("body", true);
bodyMax = (getInitParameter("maxBody") == null) ? 0 : Integer.parseInt(getInitParameter("maxBody"));
comment = getInitParameter("comment");
} catch (Exception e) {
- // Ignore exception, default to true
}
}
@@ -66,27 +71,17 @@ public class LogMessage extends GenericMailet {
return "LogHeaders Mailet";
}
+ @Override
public void service(Mail mail) {
log("Logging mail " + mail.getName());
- if (comment != null) log(comment);
+ logComment();
try {
- if (headers) log(getMessageHeaders(mail.getMessage()));
- if (body) {
- int len = bodyMax > 0 ? bodyMax : mail.getMessage().getSize();
- StringBuilder text = new StringBuilder(len);
- InputStream is = mail.getMessage().getRawInputStream();
- byte[] buf = new byte[1024];
- int read;
- while (text.length() < len && (read = is.read(buf)) > -1) {
- text.append(new String(buf, 0, Math.min(read, len - text.length())));
- }
- log(text.toString());
- }
- }
- catch (MessagingException e) {
+ MimeMessage message = mail.getMessage();
+ logHeaders(message);
+ logBody(message);
+ } catch (MessagingException e) {
log("Error logging message.", e);
- }
- catch (java.io.IOException e) {
+ } catch (java.io.IOException e) {
log("Error logging message.", e);
}
if (!passThrough) {
@@ -94,19 +89,30 @@ public class LogMessage extends GenericMailet {
}
}
- /**
- * Utility method for obtaining a string representation of a
- * Message's headers
- *
- * @param message
- */
- private String getMessageHeaders(MimeMessage message) throws MessagingException {
- @SuppressWarnings("unchecked")
- Enumeration<String> heads = message.getAllHeaderLines();
- StringBuilder headBuffer = new StringBuilder(1024).append("\n");
- while(heads.hasMoreElements()) {
- headBuffer.append(heads.nextElement().toString()).append("\n");
+ private void logComment() {
+ if (comment != null) {
+ log(comment);
}
- return headBuffer.toString();
+ }
+
+ @SuppressWarnings("unchecked")
+ private void logHeaders(MimeMessage message) throws MessagingException {
+ if (headers) {
+ log("\n");
+ for (String header : Collections.list((Enumeration<String>) message.getAllHeaderLines())) {
+ log(header + "\n");
+ }
+ }
+ }
+
+ private void logBody(MimeMessage message) throws MessagingException, IOException {
+ if (body) {
+ InputStream inputStream = ByteStreams.limit(message.getRawInputStream(), lengthToLog(message));
+ log(IOUtils.toString(inputStream));
+ }
+ }
+
+ private int lengthToLog(MimeMessage message) throws MessagingException {
+ return bodyMax > 0 ? bodyMax : message.getSize();
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/08eb7ec6/mailet/standard/src/test/java/org/apache/james/transport/mailets/LogMessageTest.java
----------------------------------------------------------------------
diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/LogMessageTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/LogMessageTest.java
index df3cad8..f26e3db 100644
--- a/mailet/standard/src/test/java/org/apache/james/transport/mailets/LogMessageTest.java
+++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/LogMessageTest.java
@@ -80,12 +80,18 @@ public class LogMessageTest {
@Test
public void serviceShouldFailWhenMailHasNoStream() throws Exception {
mailet.init(mailetConfig);
- expectedException.expect(NegativeArraySizeException.class);
MimeMessage message = new MimeMessage(Session.getDefaultInstance(new Properties()));
message.setSubject("subject");
message.setText("This is a fake mail");
mailet.service(new FakeMail(message));
+
+ verify(logger).info("Logging mail null");
+ verify(logger).info("\n");
+ verify(logger).info("Subject: subject\n");
+ verify(logger).error("Error logging message.");
+ verify(logger).error("No MimeMessage content");
+ verifyNoMoreInteractions(logger);
}
@Test
@@ -95,9 +101,9 @@ public class LogMessageTest {
mailet.service(createMail());
verify(logger).info("Logging mail name");
- verify(logger).info("\n" +
- "Subject: subject\n" +
- "Content-Type: text/plain\n");
+ verify(logger).info("\n");
+ verify(logger).info("Subject: subject\n");
+ verify(logger).info("Content-Type: text/plain\n");
verify(logger).info("This is a fake mail");
verifyNoMoreInteractions(logger);
}
@@ -164,9 +170,9 @@ public class LogMessageTest {
mailet.service(createMail());
verify(logger).info("Logging mail name");
- verify(logger).info("\n" +
- "Subject: subject\n" +
- "Content-Type: text/plain\n");
+ verify(logger).info("\n");
+ verify(logger).info("Subject: subject\n");
+ verify(logger).info("Content-Type: text/plain\n");
verifyNoMoreInteractions(logger);
}
@@ -178,9 +184,9 @@ public class LogMessageTest {
mailet.service(createMail());
verify(logger).info("Logging mail name");
- verify(logger).info("\n" +
- "Subject: subject\n" +
- "Content-Type: text/plain\n");
+ verify(logger).info("\n");
+ verify(logger).info("Subject: subject\n");
+ verify(logger).info("Content-Type: text/plain\n");
verify(logger).info("Th");
verifyNoMoreInteractions(logger);
}
@@ -194,9 +200,9 @@ public class LogMessageTest {
verify(logger).info("Logging mail name");
verify(logger).info("comment");
- verify(logger).info("\n" +
- "Subject: subject\n" +
- "Content-Type: text/plain\n");
+ verify(logger).info("\n");
+ verify(logger).info("Subject: subject\n");
+ verify(logger).info("Content-Type: text/plain\n");
verify(logger).info("This is a fake mail");
verifyNoMoreInteractions(logger);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org