Return-Path: Delivered-To: apmail-cocoon-cvs-archive@www.apache.org Received: (qmail 72648 invoked from network); 26 Oct 2006 18:44:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 26 Oct 2006 18:44:25 -0000 Received: (qmail 89272 invoked by uid 500); 26 Oct 2006 18:44:36 -0000 Delivered-To: apmail-cocoon-cvs-archive@cocoon.apache.org Received: (qmail 89224 invoked by uid 500); 26 Oct 2006 18:44:36 -0000 Mailing-List: contact cvs-help@cocoon.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@cocoon.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list cvs@cocoon.apache.org Received: (qmail 89213 invoked by uid 99); 26 Oct 2006 18:44:36 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 26 Oct 2006 11:44:36 -0700 X-ASF-Spam-Status: No, hits=0.6 required=10.0 tests=NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: local policy) Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 26 Oct 2006 11:44:23 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id E0E0D1A9846; Thu, 26 Oct 2006 11:44:02 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r468091 - in /cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail: MailMessageSender.java datasource/SourceDataSource.java transformation/SendMailTransformer.java Date: Thu, 26 Oct 2006 18:44:02 -0000 To: cvs@cocoon.apache.org From: vgritsenko@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20061026184402.E0E0D1A9846@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: vgritsenko Date: Thu Oct 26 11:44:01 2006 New Revision: 468091 URL: http://svn.apache.org/viewvc?view=rev&rev=468091 Log: merge: Mail: Log exceptions from mail attachments - JavaMail does not preserve cause exception. Modified: cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/MailMessageSender.java cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/datasource/SourceDataSource.java cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/transformation/SendMailTransformer.java Modified: cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/MailMessageSender.java URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/MailMessageSender.java?view=diff&rev=468091&r1=468090&r2=468091 ============================================================================== --- cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/MailMessageSender.java (original) +++ cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/MailMessageSender.java Thu Oct 26 11:44:01 2006 @@ -70,9 +70,9 @@ * @since 2.1 * @version $Id$ */ -public class MailMessageSender - extends AbstractLogEnabled - implements MailSender, Configurable, Serviceable, Initializable { +public class MailMessageSender extends AbstractLogEnabled + implements MailSender, Configurable, Serviceable, + Initializable { private ServiceManager manager; @@ -102,7 +102,7 @@ private Object obj; private String type; private String name; - protected boolean isURL = false; + protected boolean isURL; /** * Create a new attachment object encapsulating obj. @@ -134,10 +134,12 @@ this.type = type; this.name = name; this.isURL = isURI; - if (isNullOrEmpty(this.type)) + if (isNullOrEmpty(this.type)) { this.type = null; - if (isNullOrEmpty(this.name)) + } + if (isNullOrEmpty(this.name)) { this.name = null; + } } /** @@ -146,7 +148,7 @@ * @return true if str is null, empty string, or equals "null" */ private boolean isNullOrEmpty(String str) { - return (str == null || "".equals(str) || "null".equals(str)); + return str == null || "".equals(str) || "null".equals(str); } /** @@ -183,6 +185,7 @@ } } + public MailMessageSender() { } @@ -204,7 +207,7 @@ } /* (non-Javadoc) - * @see org.apache.avalon.framework.parameters.Parameterizable#parameterize(org.apache.avalon.framework.parameters.Parameters) + * @see Parameterizable#parameterize(Parameters) */ public void configure(Configuration config) throws ConfigurationException { this.smtpHost = config.getChild("smtp-host").getValue(null); @@ -213,7 +216,7 @@ } /* (non-Javadoc) - * @see org.apache.avalon.framework.activity.Initializable#initialize() + * @see Initializable#initialize() */ public void initialize() { initSession(); @@ -254,7 +257,6 @@ setSmtpHost(hostname); } - /** * Assemble the message from the defined fields and send it. * @throws AddressException when problems with email addresses are found @@ -265,7 +267,7 @@ try { resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE); doSend(resolver); - } catch(ServiceException se) { + } catch (ServiceException se) { throw new CascadingRuntimeException("Cannot get Source Resolver to send mail", se); } finally { this.manager.release(resolver); @@ -352,18 +354,15 @@ try { if (this.attachments.isEmpty()) { if (this.src != null) { - DataSource ds = null; + SourceDataSource ds = null; Source source = resolver.resolveURI(this.src); sourcesList.add(source); if (source.exists()) { - ds = - new SourceDataSource( - source, - (this.srcMimeType == null - ? source.getMimeType() - : this.srcMimeType), - this.src.substring(this.src.lastIndexOf('/') + 1)); + ds = new SourceDataSource(source, + this.srcMimeType == null? source.getMimeType(): this.srcMimeType, + this.src.substring(this.src.lastIndexOf('/') + 1)); + ds.enableLogging(getLogger()); } message.setDataHandler(new DataHandler(ds)); @@ -382,18 +381,15 @@ message.setContent(multipart); if (this.src != null) { - DataSource ds = null; + SourceDataSource ds = null; Source source = resolver.resolveURI(this.src); sourcesList.add(source); if (source.exists()) { - ds = - new SourceDataSource( - source, - (this.srcMimeType == null - ? source.getMimeType() - : this.srcMimeType), - this.src.substring(this.src.lastIndexOf('/') + 1)); + ds = new SourceDataSource(source, + this.srcMimeType == null? source.getMimeType(): this.srcMimeType, + this.src.substring(this.src.lastIndexOf('/') + 1)); + ds.enableLogging(getLogger()); } bodypart.setDataHandler(new DataHandler(ds)); @@ -406,25 +402,23 @@ for (Iterator i = this.attachments.iterator(); i.hasNext();) { a = (Attachment) i.next(); DataSource ds = null; + if (a.isURL) { String name = (String) a.getObject(); Source src = resolver.resolveURI(name); sourcesList.add(src); if (src.exists()) { - ds = - new SourceDataSource( - src, - a.getType(src.getMimeType()), - a.getName(name.substring(name.lastIndexOf('/') + 1))); + ds = new SourceDataSource(src, + a.getType(src.getMimeType()), + a.getName(name.substring(name.lastIndexOf('/') + 1))); + ((SourceDataSource) ds).enableLogging(getLogger()); } } else { if (a.getObject() instanceof Part) { Part part = (Part) a.getObject(); - ds = - new FilePartDataSource( - part, - a.getType(part.getMimeType()), - a.getName(part.getUploadName())); + ds = new FilePartDataSource(part, + a.getType(part.getMimeType()), + a.getName(part.getUploadName())); } else { // TODO: other classes? throw new AddressException("Not yet supported: " + a.getObject()); Modified: cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/datasource/SourceDataSource.java URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/datasource/SourceDataSource.java?view=diff&rev=468091&r1=468090&r2=468091 ============================================================================== --- cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/datasource/SourceDataSource.java (original) +++ cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/datasource/SourceDataSource.java Thu Oct 26 11:44:01 2006 @@ -19,9 +19,9 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; - import javax.activation.DataSource; +import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.excalibur.source.Source; /** @@ -33,7 +33,8 @@ * @see javax.activation.DataSource * @version $Id$ */ -public class SourceDataSource implements DataSource { +public class SourceDataSource extends AbstractLogEnabled + implements DataSource { private Source src; private String contentType; private String name; @@ -54,8 +55,12 @@ this.src = src; this.contentType = type; this.name = name; - if (isNullOrEmpty(this.name)) this.name = null; - if (isNullOrEmpty(this.contentType)) this.contentType = null; + if (isNullOrEmpty(this.name)) { + this.name = null; + } + if (isNullOrEmpty(this.contentType)) { + this.contentType = null; + } } /** @@ -64,7 +69,7 @@ * @return true if str is null, empty string, or equals "null" */ private boolean isNullOrEmpty(String str) { - return (str == null || "".equals(str) || "null".equals(str)); + return str == null || "".equals(str) || "null".equals(str); } /** @@ -79,10 +84,12 @@ if (this.contentType != null) { return this.contentType; } + String mimeType = src.getMimeType(); if (isNullOrEmpty(mimeType)) { mimeType = "application/octet-stream"; } + return mimeType; } @@ -94,7 +101,15 @@ * @see org.apache.excalibur.source.Source#getInputStream() */ public InputStream getInputStream() throws IOException { - return src.getInputStream(); + try { + return src.getInputStream(); + } catch (IOException e) { + // Sun's SMTPTransport looses cause exception. Log it now. + if (getLogger() != null) { + getLogger().warn("Unable to obtain input stream for '" + src.getURI() + "'", e); + } + throw e; + } } /** @@ -109,9 +124,10 @@ if (this.name != null){ return this.name; } + String name = src.getURI(); name = name.substring(name.lastIndexOf('/') + 1); - return ("".equals(name)? "attachment" : name); + return "".equals(name)? "attachment" : name; } /** Modified: cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/transformation/SendMailTransformer.java URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/transformation/SendMailTransformer.java?view=diff&rev=468091&r1=468090&r2=468091 ============================================================================== --- cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/transformation/SendMailTransformer.java (original) +++ cocoon/trunk/blocks/cocoon-mail/cocoon-mail-impl/src/main/java/org/apache/cocoon/mail/transformation/SendMailTransformer.java Thu Oct 26 11:44:01 2006 @@ -78,7 +78,7 @@ * <from>sender@localhost</from> * </map:transformer> * - * + * * where *
    *
  • @@ -117,7 +117,7 @@ *
  • *
*

- * + * *

* More configurations can be made in a specific configuration file, which * can be retrieved with a @@ -151,7 +151,7 @@ * * *

- * + * *

* Input document sample: *

@@ -601,20 +601,17 @@
             multipart.addBodyPart(messageBodyPart);
 
             // process attachments
-            Iterator iterAtt = this.attachments.iterator();
-    
-            while (iterAtt.hasNext()) {
-                AttachmentDescriptor aD = (AttachmentDescriptor) iterAtt.next();
+            Iterator i = this.attachments.iterator();
+            while (i.hasNext()) {
+                AttachmentDescriptor aD = (AttachmentDescriptor) i.next();
                 messageBodyPart = new MimeBodyPart();
     
                 if (!aD.isTextContent()) {
-                    Source inputSource = null;
-                    DataSource dataSource = null;
-    
-                    inputSource = resolver.resolveURI(aD.isURLSource() ? aD.strAttrSrc : aD.strAttrFile);
+                    Source inputSource = resolver.resolveURI(aD.isURLSource() ? aD.strAttrSrc : aD.strAttrFile);
                     this.usedSources.add(inputSource);
     
-                    dataSource = new SourceDataSource(inputSource, aD.strAttrMimeType, aD.strAttrName);
+                    DataSource dataSource = new SourceDataSource(inputSource, aD.strAttrMimeType, aD.strAttrName);
+                    ((SourceDataSource) dataSource).enableLogging(getLogger());
     
                     messageBodyPart.setDataHandler(new DataHandler(dataSource));
                 } else {