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 no...@apache.org on 2010/12/25 13:00:21 UTC
svn commit: r1052772 - in
/james/server/trunk/core/src/main/java/org/apache/james/core:
MimeMessageInputStream.java MimeMessageWrapper.java
Author: norman
Date: Sat Dec 25 12:00:21 2010
New Revision: 1052772
URL: http://svn.apache.org/viewvc?rev=1052772&view=rev
Log:
Make sure the MimeMessageInputStream see all changes on the MimeMessage when providing the stream. This is a fix for lost Message Content updates, anyway I will work on optimize it a bit more. See JAMES-1154
Modified:
james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java
james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java
Modified: james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java?rev=1052772&r1=1052771&r2=1052772&view=diff
==============================================================================
--- james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java (original)
+++ james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java Sat Dec 25 12:00:21 2010
@@ -27,7 +27,6 @@ import java.io.InputStream;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
-import org.apache.james.util.stream.CombinedInputStream;
/**
* Provide an {@link InputStream} over an {@link MimeMessage}
@@ -44,10 +43,11 @@ public class MimeMessageInputStream exte
* if possible
* @throws MessagingException
*/
- @SuppressWarnings("unchecked")
public MimeMessageInputStream(MimeMessage message, boolean tryCast) throws MessagingException {
MimeMessage m = message;
+ m.saveChanges();
+
// check if we need to use the wrapped message
if (tryCast && m instanceof MimeMessageCopyOnWriteProxy) {
m = ((MimeMessageCopyOnWriteProxy) m).getWrappedMessage();
@@ -57,20 +57,15 @@ public class MimeMessageInputStream exte
if (tryCast && m instanceof MimeMessageWrapper) {
in = ((MimeMessageWrapper) m).getMessageInputStream();
} else {
+
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
- in = new CombinedInputStream(new InputStream[] { new InternetHeadersInputStream(message.getAllHeaderLines()), message.getRawInputStream() });
- } catch (MessagingException e) {
- // its possible that MimeMessage.getRawInputStream throws an exception when try to access the method on a self constructed MimeMessage.
- // so try to read it in memory
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- try {
- message.writeTo(out);
- in = new ByteArrayInputStream(out.toByteArray());
- } catch (IOException e1) {
- throw new MessagingException("Unable to read message " + message, e);
- }
-
+ message.writeTo(out);
+ in = new ByteArrayInputStream(out.toByteArray());
+ } catch (IOException e1) {
+ throw new MessagingException("Unable to read message " + message, e1);
}
+
}
}
Modified: james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java?rev=1052772&r1=1052771&r2=1052772&view=diff
==============================================================================
--- james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java (original)
+++ james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java Sat Dec 25 12:00:21 2010
@@ -21,6 +21,7 @@
package org.apache.james.core;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -545,7 +546,7 @@ public class MimeMessageWrapper
/**
* @see javax.mail.internet.MimeMessage#getRawInputStream()
*/
- public InputStream getRawInputStream() throws MessagingException {
+ public synchronized InputStream getRawInputStream() throws MessagingException {
if (!messageParsed && !isModified() && source != null) {
InputStream is;
try {
@@ -556,16 +557,19 @@ public class MimeMessageWrapper
} catch (IOException e) {
throw new MessagingException("Unable to read the stream: " + e.getMessage(), e);
}
- } else return super.getRawInputStream();
+ } else {
+ return super.getRawInputStream();
+ }
}
/**
* Return an {@link InputStream} which holds the full content of the message. This method
- * tries to optimize this call as far as possible
+ * tries to optimize this call as far as possible. This stream contains the updated {@link MimeMessage} content if something was changed
*
* @return messageInputStream
* @throws MessagingException
*/
+
public synchronized InputStream getMessageInputStream() throws MessagingException{
if (!messageParsed && !isModified() && source != null) {
try {
@@ -574,7 +578,16 @@ public class MimeMessageWrapper
throw new MessagingException("Unable to get inputstream", e);
}
} else {
- return new MimeMessageInputStream(this, false);
+
+ //TODO: Optimise me...
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ try {
+ writeTo(out);
+ return new ByteArrayInputStream(out.toByteArray());
+
+ } catch (IOException e) {
+ throw new MessagingException("Unable to get inputstream", e);
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org