Author: bspeakmon
Date: Tue Jun  5 13:55:13 2007
New Revision: 544629

URL: http://svn.apache.org/viewvc?view=rev&rev=544629
Log:
- EMAIL-64: Use wiser instead of dumbster for test cases
  - includes work by Bindul Bhowmik in original issue
- updated pom.xml and project.xml to reflect wiser, subethasmtp 
  and retroweaver dependencies
- updated build instructions
- removed dumbster dependency
- added self to developers list

Modified:
    jakarta/commons/proper/email/trunk/pom.xml
    jakarta/commons/proper/email/trunk/project.xml
    
jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/BaseEmailTestCase.java
    jakarta/commons/proper/email/trunk/xdocs/building.xml

Modified: jakarta/commons/proper/email/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/email/trunk/pom.xml?view=diff&rev=544629&r1=544628&r2=544629
==============================================================================
--- jakarta/commons/proper/email/trunk/pom.xml (original)
+++ jakarta/commons/proper/email/trunk/pom.xml Tue Jun  5 13:55:13 2007
@@ -49,23 +49,6 @@
         
<url>http://svn.apache.org/viewvc/jakarta/commons/proper/email/trunk</url>
     </scm>
 
-       <repositories>
-        <!-- Used for getting dumbster test dependency only. -->
-        <repository>
-            <id>apache.m1.snapshots</id>
-            <name>Apache M1 Snapshot repository</name>
-            <layout>legacy</layout>
-            <url>http://people.apache.org/repo/m1-snapshot-repository</url>
-            <snapshots>
-                <enabled>true</enabled>
-                <checksumPolicy>ignore</checksumPolicy>
-            </snapshots>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-        </repository>
-       </repositories>
-
     <developers>
         <developer>
             <name>dIon Gillard</name>
@@ -146,6 +129,16 @@
             <roles/>
             <timezone>0</timezone>
         </developer>
+        <developer>
+            <name>Ben Speakmon</name>
+            <id>bspeakmon</id>
+            <email>[EMAIL PROTECTED]</email>
+            <organization>Apache Software Foundation</organization>
+            <roles>
+                <role>Java Developer</role>
+            </roles>
+            <timezone>-8</timezone>
+        </developer>
     </developers>
     <contributors>
         <contributor>
@@ -194,10 +187,30 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>dumbster</groupId>
-            <artifactId>dumbster</artifactId>
-            <version>SNAPSHOT</version>
-            <!--<url>http://quintanasoft.com/dumbster/</url>-->
+            <groupId>org.subethamail</groupId>
+            <artifactId>subethasmtp-wiser-jdk14</artifactId>
+            <version>1.2</version>
+            <!--<url>http://subethasmtp.tigris.org/wiser.html</url>-->
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.subethamail</groupId>
+            <artifactId>subethasmtp-smtp-jdk14</artifactId>
+            <version>1.2</version>
+            <!--<url>http://subethasmtp.tigris.org/</url>-->
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>net.sourceforge.retroweaver</groupId>
+            <artifactId>retroweaver-rt</artifactId>
+            <version>2.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.1</version>
+            <!--<url>http://jakarta.apache.org/commons/logging/</url>-->
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -224,12 +237,12 @@
             </resource>
         </resources>
         <testResources>
-               <testResource>
-                       <directory>src/test</directory>
-                       <excludes>
-                               <exclude>**/*.java</exclude>
-                       </excludes>
-               </testResource>
+            <testResource>
+                <directory>src/test</directory>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </testResource>
         </testResources>
         <plugins>
             <plugin>

Modified: jakarta/commons/proper/email/trunk/project.xml
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/email/trunk/project.xml?view=diff&rev=544629&r1=544628&r2=544629
==============================================================================
--- jakarta/commons/proper/email/trunk/project.xml (original)
+++ jakarta/commons/proper/email/trunk/project.xml Tue Jun  5 13:55:13 2007
@@ -30,9 +30,9 @@
 
     <licenses>
       <license>
-       <name>The Apache Software License, Version 2.0</name>
-       <url>/LICENSE.txt</url>
-       <distribution>repo</distribution>
+        <name>The Apache Software License, Version 2.0</name>
+        <url>/LICENSE.txt</url>
+        <distribution>repo</distribution>
       </license>
     </licenses>
 
@@ -158,6 +158,16 @@
           <roles/>
           <timezone>0</timezone>
         </developer>
+        <developer>
+            <name>Ben Speakmon</name>
+            <id>bspeakmon</id>
+            <email>[EMAIL PROTECTED]</email>
+            <organization>Apache Software Foundation</organization>
+            <roles>
+                <role>Java Developer</role>
+            </roles>
+            <timezone>-8</timezone>
+        </developer>
     </developers>
     <contributors>
         <contributor>
@@ -208,14 +218,37 @@
             </properties>
         </dependency>
         <dependency>
-            <groupId>dumbster</groupId>
-            <artifactId>dumbster</artifactId>
-            <version>SNAPSHOT</version>
-            <url>http://quintanasoft.com/dumbster/</url>
+            <groupId>org.subethamail</groupId>
+            <artifactId>subethasmtp-wiser-jdk14</artifactId>
+            <version>1.2</version>
+            <url>http://subethasmtp.tigris.org/wiser.html</url>
+            <properties>
+              <scope>test</scope>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>org.subethamail</groupId>
+            <artifactId>subethasmtp-smtp-jdk14</artifactId>
+            <version>1.2</version>
+            <url>http://subethasmtp.tigris.org/</url>
             <properties>
               <scope>test</scope>
-              <comment>Testing only</comment>
             </properties>
+        </dependency>
+        <dependency>
+            <groupId>net.sourceforge.retroweaver</groupId>
+            <artifactId>retroweaver-rt</artifactId>
+            <version>2.0</version>
+            <properties>
+              <scope>test</scope>
+            </properties>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.1</version>
+            <url>http://jakarta.apache.org/commons/logging/</url>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>maven-plugins</groupId>

Modified: 
jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/BaseEmailTestCase.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/BaseEmailTestCase.java?view=diff&rev=544629&r1=544628&r2=544629
==============================================================================
--- 
jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/BaseEmailTestCase.java
 (original)
+++ 
jakarta/commons/proper/email/trunk/src/test/org/apache/commons/mail/BaseEmailTestCase.java
 Tue Jun  5 13:55:13 2007
@@ -16,22 +16,29 @@
  */
 package org.apache.commons.mail;
 
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.util.Date;
-import java.util.Iterator;
+import java.util.Enumeration;
 import java.util.List;
 
+import javax.activation.DataHandler;
+import javax.mail.Header;
+import javax.mail.MessagingException;
 import javax.mail.Multipart;
 import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
 
 import junit.framework.TestCase;
 
 import org.apache.commons.mail.settings.EmailConfiguration;
+import org.subethamail.wiser.Wiser;
+import org.subethamail.wiser.WiserMessage;
+
 
-import com.dumbster.smtp.SimpleSmtpServer;
-import com.dumbster.smtp.SmtpMessage;
 
 /**
  * Base test case for Email test classes
@@ -44,16 +51,19 @@
 
 public class BaseEmailTestCase extends TestCase
 {
-    /** Padding at end of body added by dumbser/send */
+    /** Padding at end of body added by wiser/send */
     public static final int BODY_END_PAD = 3;
-    /** Padding at start of body added by dumbser/send */
+    /** Padding at start of body added by wiser/send */
     public static final int BODY_START_PAD = 2;
 
+    /** Line separator in email messages */
+    private static final String LINE_SEPARATOR = "\r\n";
+
     /** default port */
     private static int mailServerPort = EmailConfiguration.MAIL_SERVER_PORT;
 
-    /** The fake Dumbster email server */
-    protected SimpleSmtpServer fakeMailServer;
+    /** The fake Wiser email server */
+    protected Wiser fakeMailServer;
 
     /** Mail server used for testing */
     protected String strTestMailServer = EmailConfiguration.MAIL_SERVER;
@@ -103,10 +113,10 @@
     protected void tearDown()
     {
         //stop the fake email server (if started)
-        if (this.fakeMailServer != null && !this.fakeMailServer.isStopped())
+        if (this.fakeMailServer != null && 
!isMailServerStopped(fakeMailServer))
         {
             this.fakeMailServer.stop();
-            assertTrue("Mail server didn't stop", 
this.fakeMailServer.isStopped());
+            assertTrue("Mail server didn't stop", 
isMailServerStopped(fakeMailServer));
         }
 
         this.fakeMailServer = null;
@@ -126,7 +136,7 @@
      * @param email email
      * @throws IOException Exception
      */
-    protected void saveEmailToFile(SmtpMessage email) throws IOException
+    protected void saveEmailToFile(WiserMessage email) throws IOException
     {
         File emailFile =
             new File(emailOutputDir, "email" + new Date().getTime() + ".txt");
@@ -141,40 +151,49 @@
      */
     public String getMessageAsString(int intMsgNo)
     {
-        assertTrue(this.fakeMailServer.getReceivedEmailSize() >= intMsgNo);
-        Iterator emailIter = fakeMailServer.getReceivedEmail();
-        SmtpMessage emailMessage = null;
-        for (int intCurMsg = 0; intCurMsg < intMsgNo; intCurMsg++)
-        {
-            emailMessage = (SmtpMessage) emailIter.next();
-        }
+        List receivedMessages = fakeMailServer.getMessages();
+        assertTrue("mail server didn't get enough messages", 
receivedMessages.size() >= intMsgNo);
+
+        WiserMessage emailMessage = (WiserMessage) 
receivedMessages.get(intMsgNo);
 
         if (emailMessage != null)
         {
-            return emailMessage.toString();
+            try
+            {
+                return serializeEmailMessage(emailMessage);
+            }
+            catch (Exception e)
+            {
+                // ignore, since the test will fail on an empty string return
+            }
         }
-        fail("Message note found");
+        fail("Message not found");
         return "";
     }
 
-    /** */
+    /**
+     * Initializes the stub mail server. Fails if the server cannot be proven
+     * to have started. If the server is already started, this method returns
+     * without changing the state of the server.
+     */
     public void getMailServer()
     {
-        if (this.fakeMailServer == null || this.fakeMailServer.isStopped())
+        if (this.fakeMailServer == null || isMailServerStopped(fakeMailServer))
         {
             mailServerPort++;
 
-            this.fakeMailServer =
-                    SimpleSmtpServer.start(getMailServerPort());
+            this.fakeMailServer = new Wiser();
+            this.fakeMailServer.setPort(getMailServerPort());
+            this.fakeMailServer.start();
 
-            assertFalse("fake mail server didn't start", 
this.fakeMailServer.isStopped());
+            assertFalse("fake mail server didn't start", 
isMailServerStopped(fakeMailServer));
 
             Date dtStartWait = new Date();
-            while (this.fakeMailServer.isStopped())
+            while (isMailServerStopped(fakeMailServer))
             {
                 // test for connected
                 if (this.fakeMailServer != null
-                    && !this.fakeMailServer.isStopped())
+                    && !isMailServerStopped(fakeMailServer))
                 {
                     break;
                 }
@@ -198,11 +217,11 @@
      * @param ccAdd list of expected cc addresses
      * @param bccAdd list of expected bcc addresses
      * @param boolSaveToFile true will output to file, false doesnt
-     * @return SmtpMessage email to check
+     * @return WiserMessage email to check
      * @throws IOException Exception
      */
-    protected SmtpMessage validateSend(
-        SimpleSmtpServer mailServer,
+    protected WiserMessage validateSend(
+        Wiser mailServer,
         String strSubject,
         InternetAddress fromAdd,
         List toAdd,
@@ -211,39 +230,54 @@
         boolean boolSaveToFile)
         throws IOException
     {
-        assertTrue(mailServer.getReceivedEmailSize() == 1);
-        Iterator emailIter = fakeMailServer.getReceivedEmail();
-        SmtpMessage emailMessage = (SmtpMessage) emailIter.next();
+        assertTrue("mail server doesn't contain expected message",
+                mailServer.getMessages().size() == 1);
+        WiserMessage emailMessage = (WiserMessage) 
mailServer.getMessages().get(0);
 
         if (boolSaveToFile)
         {
             this.saveEmailToFile(emailMessage);
         }
 
-        // test subject
-        assertEquals(strSubject, emailMessage.getHeaderValue("Subject"));
+        try
+        {
+            // get the MimeMessage
+            MimeMessage mimeMessage = emailMessage.getMimeMessage();
 
-        //test from address
-        assertEquals(fromAdd.toString(), emailMessage.getHeaderValue("From"));
+            // test subject
+            assertEquals("got wrong subject from mail",
+                    strSubject, mimeMessage.getHeader("Subject", null));
+
+            //test from address
+            assertEquals("got wrong From: address from mail",
+                    fromAdd.toString(), mimeMessage.getHeader("From", null));
+
+            //test to address
+            assertTrue("got wrong To: address from mail",
+                toAdd.toString().indexOf(mimeMessage.getHeader("To", null)) != 
-1);
 
-        //test to address
-        assertTrue(
-            toAdd.toString().indexOf(emailMessage.getHeaderValue("To")) != -1);
+            //test cc address
+            if (ccAdd.size() > 0)
+            {
+                assertTrue("got wrong Cc: address from mail",
+                    ccAdd.toString().indexOf(mimeMessage.getHeader("Cc", null))
+                        != -1);
+            }
 
-        //test cc address
-        if (ccAdd.size() > 0)
-        {
-            assertTrue(
-                ccAdd.toString().indexOf(emailMessage.getHeaderValue("Cc"))
-                    != -1);
+            //test bcc address
+            if (bccAdd.size() > 0)
+            {
+                assertTrue("got wrong Bcc: address from mail",
+                    bccAdd.toString().indexOf(mimeMessage.getHeader("Bcc", 
null))
+                        != -1);
+            }
         }
-
-        //test bcc address
-        if (bccAdd.size() > 0)
+        catch (MessagingException me)
         {
-            assertTrue(
-                bccAdd.toString().indexOf(emailMessage.getHeaderValue("Bcc"))
-                    != -1);
+            IllegalStateException ise =
+                new IllegalStateException("caught MessagingException in 
validateSend()");
+            ise.initCause(me);
+            throw ise;
         }
 
         return emailMessage;
@@ -262,7 +296,7 @@
      * @throws IOException Exception
      */
     protected void validateSend(
-        SimpleSmtpServer mailServer,
+        Wiser mailServer,
         String strSubject,
         Multipart content,
         InternetAddress fromAdd,
@@ -273,7 +307,7 @@
         throws IOException
     {
         // test other properties
-        SmtpMessage emailMessage = this.validateSend(
+        WiserMessage emailMessage = this.validateSend(
             mailServer,
             strSubject,
             fromAdd,
@@ -289,12 +323,13 @@
             content.getContentType();
         // get received email content (chop off the auto-added \n
         // and -- (front and end)
+        String emailMessageBody = getMessageBody(emailMessage);
         String strMessageBody =
-            emailMessage.getBody().substring(
-                BaseEmailTestCase.BODY_START_PAD,
-                emailMessage.getBody().length()
-                    - BaseEmailTestCase.BODY_END_PAD);
-        assertTrue(strMessageBody.indexOf(strSentContent) != -1);
+            emailMessageBody.substring(BaseEmailTestCase.BODY_START_PAD,
+                                       emailMessageBody.length()
+                                       - BaseEmailTestCase.BODY_END_PAD);
+        assertTrue("didn't find expected content type in message body",
+                strMessageBody.indexOf(strSentContent) != -1);
     }
 
     /**
@@ -310,7 +345,7 @@
      * @throws IOException Exception
      */
     protected void validateSend(
-        SimpleSmtpServer mailServer,
+        Wiser mailServer,
         String strSubject,
         String strMessage,
         InternetAddress fromAdd,
@@ -321,7 +356,7 @@
         throws IOException
     {
         // test other properties
-        SmtpMessage emailMessage = this.validateSend(
+        WiserMessage emailMessage = this.validateSend(
             mailServer,
             strSubject,
             fromAdd,
@@ -331,6 +366,134 @@
             true);
 
         // test message content
-        assertTrue(emailMessage.getBody().indexOf(strMessage) != -1);
+        assertTrue("didn't find expected message content in message body",
+                getMessageBody(emailMessage).indexOf(strMessage) != -1);
+    }
+
+    /**
+     * Serializes the [EMAIL PROTECTED] MimeMessage} from the 
<code>WiserMessage</code>
+     * passed in. The headers are serialized first followed by the message
+     * body.
+     *
+     * @param email The <code>WiserMessage</code> to serialize.
+     * @return The string format of the message.
+     * @throws MessagingException
+     * @throws IOException
+     *             Thrown while serializing the body from
+     *             [EMAIL PROTECTED] 
DataHandler#writeTo(java.io.OutputStream)}.
+     * @throws MessagingException
+     *             Thrown while getting the body content from
+     *             [EMAIL PROTECTED] MimeMessage#getDataHandler()}
+     * @since 1.1
+     */
+    private String serializeEmailMessage(WiserMessage wiserMessage)
+            throws MessagingException, IOException
+    {
+        if (wiserMessage == null)
+        {
+            return "";
+        }
+
+        StringBuffer serializedEmail = new StringBuffer();
+        MimeMessage message = wiserMessage.getMimeMessage();
+
+        // Serialize the headers
+        for (Enumeration headers = message.getAllHeaders(); headers
+                .hasMoreElements();)
+        {
+            Header header = (Header) headers.nextElement();
+            serializedEmail.append(header.getName());
+            serializedEmail.append(": ");
+            serializedEmail.append(header.getValue());
+            serializedEmail.append(LINE_SEPARATOR);
+        }
+
+        // Serialize the body
+        byte[] messageBody = getMessageBodyBytes(message);
+
+        serializedEmail.append(LINE_SEPARATOR);
+        serializedEmail.append(messageBody);
+        serializedEmail.append(LINE_SEPARATOR);
+
+        return serializedEmail.toString();
+    }
+
+    /**
+     * Returns a string representation of the message body. If the message body
+     * cannot be read, an empty string is returned.
+     *
+     * @param wiserMessage The wiser message from which to extract the message 
body
+     * @return The string representation of the message body
+     * @throws IOException
+     *             Thrown while serializing the body from
+     *             [EMAIL PROTECTED] 
DataHandler#writeTo(java.io.OutputStream)}.
+     * @since 1.1
+     */
+    private String getMessageBody(WiserMessage wiserMessage)
+            throws IOException
+    {
+        if (wiserMessage == null)
+        {
+            return "";
+        }
+
+        byte[] messageBody = null;
+
+        try
+        {
+            MimeMessage message = wiserMessage.getMimeMessage();
+            messageBody = getMessageBodyBytes(message);
+        }
+        catch (MessagingException me)
+        {
+            // Thrown while getting the body content from
+            // [EMAIL PROTECTED] MimeMessage#getDataHandler()}
+            IllegalStateException ise =
+                new IllegalStateException("couldn't process MimeMessage from 
WiserMessage in getMessageBody()");
+            ise.initCause(me);
+            throw ise;
+        }
+
+        return (messageBody != null) ? (new String(messageBody).intern()) : "";
+    }
+
+    /**
+     * Gets the byte making up the body of the message.
+     *
+     * @param mimeMessage
+     *            The mime message from which to extract the body.
+     * @return A byte array representing the message body
+     * @throws IOException
+     *             Thrown while serializing the body from
+     *             [EMAIL PROTECTED] 
DataHandler#writeTo(java.io.OutputStream)}.
+     * @throws MessagingException
+     *             Thrown while getting the body content from
+     *             [EMAIL PROTECTED] MimeMessage#getDataHandler()}
+     * @since 1.1
+     */
+    private byte[] getMessageBodyBytes(MimeMessage mimeMessage)
+            throws IOException, MessagingException
+    {
+        DataHandler dataHandler = mimeMessage.getDataHandler();
+        ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();
+        BufferedOutputStream buffOs = new BufferedOutputStream(
+                byteArrayOutStream);
+        dataHandler.writeTo(buffOs);
+        buffOs.flush();
+
+        return byteArrayOutStream.toByteArray();
+    }
+
+    /**
+     * Checks if an email server is running at the address stored in the
+     * <code>fakeMailServer</code>.
+     *
+     * @param fakeMailServer
+     *            The server from which the address is picked up.
+     * @return <code>true</code> if the server claims to be running
+     * @since 1.1
+     */
+    protected boolean isMailServerStopped(Wiser fakeMailServer) {
+        return !fakeMailServer.getServer().isRunning();
     }
 }

Modified: jakarta/commons/proper/email/trunk/xdocs/building.xml
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/email/trunk/xdocs/building.xml?view=diff&rev=544629&r1=544628&r2=544629
==============================================================================
--- jakarta/commons/proper/email/trunk/xdocs/building.xml (original)
+++ jakarta/commons/proper/email/trunk/xdocs/building.xml Tue Jun  5 13:55:13 
2007
@@ -45,39 +45,44 @@
   <p>
     To build the full website, run "maven site".
     The result will be in "target/docs".
-       You must be online and using JDK 1.4 or higher to successfully complete 
this target.
+    You must be online and using JDK 1.4 or higher to successfully complete 
this target.
   </p>
   <p>
-       Commons Email requires two jar files to compile and run - 
activation-1.0.2.jar and javamail-1.3.3.jar.
-       These are not present in the main maven ibiblio repository due to Sun 
licensing restrictions.
-       You must manually download these jars and install them in your own 
local repository.
+    Commons Email requires two jar files to compile and run - 
activation-1.1.jar and javamail-1.4.jar.
+    These are not present in the main maven ibiblio repository due to Sun 
licensing restrictions.
+    You must manually download these jars and install them in your own local 
repository.
   </p>
   <p>
-       Sun Javamail, available from
-       <a 
href="http://java.sun.com/products/javamail/";>http://java.sun.com/products/javamail/</a><br
 />
-       Sun Activation Framework, available from
-       <a 
href="http://java.sun.com/products/javabeans/glasgow/jaf.html";>http://java.sun.com/products/javabeans/glasgow/jaf.html</a><br
 />
+    Sun Javamail, available from
+    <a 
href="http://java.sun.com/products/javamail/";>http://java.sun.com/products/javamail/</a><br
 />
+    Sun Activation Framework, available from
+    <a 
href="http://java.sun.com/products/javabeans/glasgow/jaf.html";>http://java.sun.com/products/javabeans/glasgow/jaf.html</a><br
 />
   </p>
 </section>
 <!-- ================================================== -->
 <section name="Ant Goals">
   <p>
-       A maven generated ant file is provided for ant users.
+    A maven generated ant file is provided for ant users.
   </p>
 </section>
 <!-- ================================================== -->
 <section name="Development">
   <p>
-    Commons Email may be used on any JRE from 1.3 onwards.
+    Commons Email may be used on any JRE from 1.4 onwards.
   </p>
   <p>
-    Please note that the tests may fail under JDK 1.3 due to the use of
-    <a href="http://sourceforge.net/projects/dumbster";>Dumbster</a>
-    which is compiled with JDK 1.4.
-  </p>
-  <p>
-    Also note that on OS X you may need to use Dumbster 1.5, not Dumbster 1.6 
to run
-    the unit tests.  Just update the project.xml <i>dependency</i> element.
+    Commons Email requires <a 
href="http://subethasmtp.tigris.org/wiser.html";>Wiser</a>
+    for its unit tests. The base distribution requires JDK 1.5, but 
1.4-compatible
+    jars are also provided in the binary distribution
+    <a 
href="http://subethasmtp.tigris.org/files/documents/4046/36703/subethasmtp-1.2.zip";>here</a>.<br
 />
+
+    Finally, you will also need to install the Retroweaver runtime support
+    library on behalf of Wiser. That download is available
+    <a 
href="http://downloads.sourceforge.net/retroweaver/retroweaver-2.0.zip";>here</a>.
+
+    These jars are not yet available in the public maven repository, so you 
need to
+    install them to your local maven repository. Use the install commands 
suggested
+    by maven.
   </p>
 </section>
 <!-- ================================================== -->



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to