You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by lh...@apache.org on 2008/03/06 13:58:14 UTC

svn commit: r634253 [1/3] - in /servicemix/smx3/trunk: ./ archetypes/ archetypes/servicemix-archetypes-itests/ archetypes/servicemix-archetypes-itests/src/test/java/org/apache/servicemix/tooling/ archetypes/servicemix-mail-service-unit/ archetypes/serv...

Author: lhein
Date: Thu Mar  6 04:58:09 2008
New Revision: 634253

URL: http://svn.apache.org/viewvc?rev=634253&view=rev
Log:
implemented the new jbi component servicemix-mail
(see SM-1258)

Added:
    servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/src/test/java/org/apache/servicemix/tooling/MailServiceUnitTest.java
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/pom.xml
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/META-INF/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/META-INF/maven/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/META-INF/maven/archetype.xml
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/pom.xml
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/src/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/src/main/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/src/main/resources/
    servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/src/main/resources/xbean.xml
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/pom.xml
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailBootstrap.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailComponent.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailEndpointType.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailPollerEndpoint.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/marshaler/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/marshaler/DefaultMailMarshaler.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/package.html
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/security/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/security/CustomSSLSocketFactory.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/security/DummyTrustManager.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/utils/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/utils/MailConnectionConfiguration.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/utils/MailUtils.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/jbi/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/jbi/jboss-service.xml
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/resources/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/test/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/test/java/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/test/java/org/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/test/java/org/apache/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/test/java/org/apache/servicemix/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/test/java/org/apache/servicemix/mail/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/test/java/org/apache/servicemix/mail/DefaultMailMarshalerTest.java
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/test/resources/
    servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/test/resources/smx-logo.png   (with props)
Modified:
    servicemix/smx3/trunk/   (props changed)
    servicemix/smx3/trunk/archetypes/pom.xml
    servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/pom.xml
    servicemix/smx3/trunk/deployables/bindingcomponents/pom.xml
    servicemix/smx3/trunk/distributions/apache-servicemix/pom.xml
    servicemix/smx3/trunk/distributions/apache-servicemix/src/main/release/bin/smx-arch
    servicemix/smx3/trunk/distributions/apache-servicemix/src/main/release/bin/smx-arch.bat
    servicemix/smx3/trunk/pom.xml

Propchange: servicemix/smx3/trunk/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Mar  6 04:58:09 2008
@@ -9,3 +9,4 @@
 *.ipr
 *.iml
 velocity.log
+.project

Modified: servicemix/smx3/trunk/archetypes/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/archetypes/pom.xml?rev=634253&r1=634252&r2=634253&view=diff
==============================================================================
--- servicemix/smx3/trunk/archetypes/pom.xml (original)
+++ servicemix/smx3/trunk/archetypes/pom.xml Thu Mar  6 04:58:09 2008
@@ -60,6 +60,7 @@
         <module>servicemix-cxf-bc-service-unit</module>
         <module>servicemix-cxf-se-service-unit</module>
         <module>servicemix-osworkflow-service-unit</module>
+        <module>servicemix-mail-service-unit</module>
     </modules>
 
     <build>

Modified: servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/pom.xml?rev=634253&r1=634252&r2=634253&view=diff
==============================================================================
--- servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/pom.xml (original)
+++ servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/pom.xml Thu Mar  6 04:58:09 2008
@@ -108,6 +108,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicemix.tooling</groupId>
+      <artifactId>servicemix-mail-service-unit</artifactId>
+      <version>${servicemix-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicemix.tooling</groupId>
       <artifactId>servicemix-ode-service-unit</artifactId>
       <version>${servicemix-version}</version>
     </dependency>
@@ -220,6 +225,11 @@
     <dependency>
       <groupId>org.apache.servicemix</groupId>
       <artifactId>servicemix-lwcontainer</artifactId>
+      <version>${servicemix-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicemix</groupId>
+      <artifactId>servicemix-mail</artifactId>
       <version>${servicemix-version}</version>
     </dependency>
     <dependency>

Added: servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/src/test/java/org/apache/servicemix/tooling/MailServiceUnitTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/src/test/java/org/apache/servicemix/tooling/MailServiceUnitTest.java?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/src/test/java/org/apache/servicemix/tooling/MailServiceUnitTest.java (added)
+++ servicemix/smx3/trunk/archetypes/servicemix-archetypes-itests/src/test/java/org/apache/servicemix/tooling/MailServiceUnitTest.java Thu Mar  6 04:58:09 2008
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.tooling;
+
+public class MailServiceUnitTest extends AbstractArchetypeTest {
+
+    public void testMailServiceUnit() throws Exception {
+        testServiceMixArchetype("mail-service-unit");
+    }
+
+}

Added: servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/pom.xml?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/pom.xml (added)
+++ servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/pom.xml Thu Mar  6 04:58:09 2008
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.servicemix</groupId>
+    <artifactId>archetypes</artifactId>
+    <version>3.3-SNAPSHOT</version>
+  </parent>
+
+  <groupId>org.apache.servicemix.tooling</groupId>
+  <artifactId>servicemix-mail-service-unit</artifactId>
+  <name>ServiceMix :: Archetypes :: MailServiceUnit</name>
+
+</project>

Added: servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/META-INF/maven/archetype.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/META-INF/maven/archetype.xml?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/META-INF/maven/archetype.xml (added)
+++ servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/META-INF/maven/archetype.xml Thu Mar  6 04:58:09 2008
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<archetype>
+  <id>servicemix-mail-service-unit</id>
+  <resources>
+    <resource>src/main/resources/xbean.xml</resource>   
+  </resources>  
+</archetype>

Added: servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/pom.xml?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/pom.xml (added)
+++ servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/pom.xml Thu Mar  6 04:58:09 2008
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>${groupId}</groupId>
+  <artifactId>${artifactId}</artifactId>
+  <packaging>jbi-service-unit</packaging>
+  <version>${version}</version>
+  <name>A custom project</name>
+  <url>http://www.myorganization.org</url>
+  @{repositories}
+  <properties>
+    <servicemix-version>@{servicemix-version}</servicemix-version>
+  </properties>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicemix</groupId>
+      <artifactId>servicemix-core</artifactId>
+      <version>${servicemix-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicemix</groupId>
+      <artifactId>servicemix-mail</artifactId>
+      <version>${servicemix-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+  <build>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <includes>
+          <include>**/*</include>
+        </includes>
+      </resource>
+    </resources>
+    <plugins>
+      <plugin>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <source>1.5</source>
+          <target>1.5</target>
+        </configuration>
+      </plugin>
+      <plugin>
+      <groupId>org.apache.servicemix.tooling</groupId>
+        <artifactId>jbi-maven-plugin</artifactId>
+        <version>${servicemix-version}</version>
+        <extensions>true</extensions>
+        <configuration>
+          <type>service-unit</type>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Added: servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/src/main/resources/xbean.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/src/main/resources/xbean.xml?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/src/main/resources/xbean.xml (added)
+++ servicemix/smx3/trunk/archetypes/servicemix-mail-service-unit/src/main/resources/archetype-resources/src/main/resources/xbean.xml Thu Mar  6 04:58:09 2008
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+
+<beans xmlns:mail="http://servicemix.apache.org/mail/1.0"
+       xmlns:replaceMe="http://servicemix.apache.org/replaceMe">
+       
+    <mail:poller service="replaceMe:mailService" 
+                 endpoint="pollerEndpoint" 
+                 targetService="replaceMe:mailProcessingService"
+                 period="10000"
+                 debugMode="false"
+                 connection="imap://username@host/INBOX?password=mypass"
+                 deleteProcessedMessages="false"
+                 processOnlyUnseenMessages="true" /> 
+
+    <mail:sender service="replaceMe:mailService" 
+                 endpoint="senderEndpoint"
+                 sender="no-reply@mycompany.com"
+                 debugMode="false" 
+                 connection="smtp://username@host?password=mypass" />                 
+</beans>

Modified: servicemix/smx3/trunk/deployables/bindingcomponents/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/pom.xml?rev=634253&r1=634252&r2=634253&view=diff
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/pom.xml (original)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/pom.xml Thu Mar  6 04:58:09 2008
@@ -39,6 +39,7 @@
     <module>servicemix-ftp</module>
     <module>servicemix-http</module>
     <module>servicemix-jms</module>
+    <module>servicemix-mail</module>
     <module>servicemix-truezip</module>
     <module>servicemix-xmpp</module>
   </modules>

Added: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/pom.xml?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/pom.xml (added)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/pom.xml Thu Mar  6 04:58:09 2008
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+  <parent>
+    <groupId>org.apache.servicemix</groupId>
+    <artifactId>bindingcomponents</artifactId>
+    <version>3.3-SNAPSHOT</version>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.servicemix</groupId>
+  <artifactId>servicemix-mail</artifactId>
+  <packaging>jbi-component</packaging>
+  <name>ServiceMix :: Mail</name>
+  <description>A Mail component</description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicemix</groupId>
+      <artifactId>servicemix-shared</artifactId>
+      <version>${servicemix-version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicemix</groupId>
+      <artifactId>servicemix-core</artifactId>
+      <version>${servicemix-version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.mail</groupId>
+      <artifactId>mail</artifactId>
+      <version>1.4</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.easymock</groupId>
+      <artifactId>easymock</artifactId>
+      <version>2.3</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <resources>
+      <resource>
+        <directory>src/main/resources</directory>
+        <includes>
+          <include>**/*</include>
+        </includes>
+      </resource>
+      <resource>
+        <directory>target/generated</directory>
+        <includes>
+          <include>**/*</include>
+        </includes>
+      </resource>
+    </resources>
+    <testResources>
+      <testResource>
+        <directory>src/test/resources</directory>
+        <includes>
+          <include>**/*.properties</include>
+          <include>**/*.x*</include>
+          <include>**/*.wsdl</include>
+          <include>**/*.jks</include>
+          <include>**/*.zip</include>
+          <include>**/*.txt</include>
+          <include>**/*.csv</include>
+          <include>**/*.png</include>
+        </includes>
+      </testResource>
+      <testResource>
+        <directory>src/test/java</directory>
+        <includes>
+          <include>**/*.jar</include>
+          <include>**/*.zip</include>
+        </includes>
+      </testResource>
+    </testResources>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.servicemix.tooling</groupId>
+        <artifactId>jbi-maven-plugin</artifactId>
+        <version>${servicemix-version}</version>
+        <extensions>true</extensions>
+        <configuration>
+          <type>binding-component</type>       
+          <component>org.apache.servicemix.mail.MailComponent</component>
+          <bootstrap>org.apache.servicemix.mail.MailBootstrap</bootstrap>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.xbean</groupId>
+        <artifactId>maven-xbean-plugin</artifactId>
+        <version>${xbean-version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>mapping</goal>
+            </goals>
+            <configuration>
+              <namespace>http://servicemix.apache.org/mail/1.0</namespace>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <forkMode>always</forkMode>
+          <workingDirectory>${basedir}</workingDirectory>
+          <includes>
+            <include>**/*Test.*</include>
+          </includes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>

Added: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailBootstrap.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailBootstrap.java?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailBootstrap.java (added)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailBootstrap.java Thu Mar  6 04:58:09 2008
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.mail;
+
+import javax.jbi.JBIException;
+import javax.jbi.component.Bootstrap;
+import javax.jbi.component.InstallationContext;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+/**
+ * Bootstrap class. This class is useful to perform tasks at installation /
+ * uninstallation time
+ * 
+ * @author lhein
+ */
+public class MailBootstrap implements Bootstrap {
+    protected InstallationContext context;
+    protected ObjectName mbeanName;
+
+    /**
+     * 
+     */
+    public MailBootstrap() {
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see javax.jbi.component.Bootstrap#getExtensionMBeanName()
+     */
+    public ObjectName getExtensionMBeanName() {
+        return mbeanName;
+    }
+
+    /**
+     * 
+     */
+    protected Object getExtensionMBean() throws Exception {
+        return null;
+    }
+
+    /**
+     * 
+     * @return
+     * @throws Exception
+     */
+    protected ObjectName createExtensionMBeanName() throws Exception {
+        return this.context.getContext().getMBeanNames().createCustomComponentMBeanName("bootstrap");
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.jbi.component.Bootstrap#init(javax.jbi.component.InstallationContext)
+     */
+    public void init(InstallationContext installContext) throws JBIException {
+        try {
+            this.context = installContext;
+            doInit();
+        } catch (JBIException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new JBIException("Error calling init", e);
+        }
+    }
+
+    /**
+     * 
+     * @throws Exception
+     */
+    protected void doInit() throws Exception {
+        Object mbean = getExtensionMBean();
+        if (mbean != null) {
+            this.mbeanName = createExtensionMBeanName();
+            MBeanServer server = this.context.getContext().getMBeanServer();
+            if (server == null) {
+                throw new JBIException("null mBeanServer");
+            }
+            if (server.isRegistered(this.mbeanName)) {
+                server.unregisterMBean(this.mbeanName);
+            }
+            server.registerMBean(mbean, this.mbeanName);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.jbi.component.Bootstrap#cleanUp()
+     */
+    public void cleanUp() throws JBIException {
+        try {
+            doCleanUp();
+        } catch (JBIException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new JBIException("Error calling cleanUp", e);
+        }
+    }
+
+    /**
+     * 
+     * @throws Exception
+     */
+    protected void doCleanUp() throws Exception {
+        if (this.mbeanName != null) {
+            MBeanServer server = this.context.getContext().getMBeanServer();
+            if (server == null) {
+                throw new JBIException("null mBeanServer");
+            }
+            if (server.isRegistered(this.mbeanName)) {
+                server.unregisterMBean(this.mbeanName);
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.jbi.component.Bootstrap#onInstall()
+     */
+    public void onInstall() throws JBIException {
+        try {
+            doOnInstall();
+        } catch (JBIException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new JBIException("Error calling onInstall", e);
+        }
+    }
+
+    /**
+     * 
+     * @throws Exception
+     */
+    protected void doOnInstall() throws Exception {
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see javax.jbi.component.Bootstrap#onUninstall()
+     */
+    public void onUninstall() throws JBIException {
+        try {
+            doOnUninstall();
+        } catch (JBIException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new JBIException("Error calling onUninstall", e);
+        }
+    }
+
+    /**
+     * 
+     * @throws Exception
+     */
+    protected void doOnUninstall() throws Exception {
+    }
+}

Added: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailComponent.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailComponent.java?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailComponent.java (added)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailComponent.java Thu Mar  6 04:58:09 2008
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.mail;
+
+import java.util.List;
+
+import org.apache.servicemix.common.DefaultComponent;
+
+/**
+ * @org.apache.xbean.XBean element="component" description="Mail Component"
+ * 
+ * @author lhein
+ */
+public class MailComponent extends DefaultComponent {
+    private MailEndpointType[] endpoints;
+
+    /**
+     * 
+     * @return
+     */
+    public MailEndpointType[] getEndpoints() {
+        return endpoints;
+    }
+
+    /**
+     * 
+     * @param endpoints
+     */
+    public void setEndpoints(MailEndpointType[] endpoints) {
+        this.endpoints = endpoints;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.servicemix.common.DefaultComponent#getConfiguredEndpoints()
+     */
+    protected List getConfiguredEndpoints() {
+        return asList(getEndpoints());
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.servicemix.common.DefaultComponent#getEndpointClasses()
+     */
+    protected Class[] getEndpointClasses() {
+        return new Class[] {MailPollerEndpoint.class, MailSenderEndpoint.class};
+    }
+}

Added: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailEndpointType.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailEndpointType.java?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailEndpointType.java (added)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailEndpointType.java Thu Mar  6 04:58:09 2008
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.mail;
+
+/**
+ * @author lhein
+ */
+public interface MailEndpointType {
+}

Added: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailPollerEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailPollerEndpoint.java?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailPollerEndpoint.java (added)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailPollerEndpoint.java Thu Mar  6 04:58:09 2008
@@ -0,0 +1,303 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.mail;
+
+import java.util.Properties;
+
+import javax.jbi.JBIException;
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.mail.Flags;
+import javax.mail.Folder;
+import javax.mail.Session;
+import javax.mail.Store;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.ParseException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.servicemix.common.endpoints.PollingEndpoint;
+
+import org.apache.servicemix.mail.marshaler.AbstractMailMarshaler;
+import org.apache.servicemix.mail.marshaler.DefaultMailMarshaler;
+import org.apache.servicemix.mail.utils.MailConnectionConfiguration;
+import org.apache.servicemix.mail.utils.MailUtils;
+
+/**
+ * This is the polling endpoint for the mail component.
+ * 
+ * @org.apache.xbean.XBean element="poller"
+ * @author lhein
+ */
+public class MailPollerEndpoint extends PollingEndpoint implements MailEndpointType {
+    private static final transient Log LOG = LogFactory.getLog(MailPollerEndpoint.class);
+
+    private AbstractMailMarshaler marshaler = new DefaultMailMarshaler();
+    private String customTrustManagers;
+    private MailConnectionConfiguration config;
+
+    private String connection;
+
+    private int maxFetchSize = 5;
+
+    private boolean processOnlyUnseenMessages;
+    private boolean deleteProcessedMessages;
+    private boolean debugMode;
+
+    /**
+     * default constructor
+     */
+    public MailPollerEndpoint() {
+        this.processOnlyUnseenMessages = true;
+        this.deleteProcessedMessages = false;
+        this.debugMode = false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.servicemix.common.endpoints.ConsumerEndpoint#getLocationURI()
+     */
+    @Override
+    public String getLocationURI() {
+        // return a URI that unique identify this endpoint
+        return getService() + "#" + getEndpoint();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.servicemix.common.ExchangeProcessor#process(javax.jbi.messaging.MessageExchange)
+     */
+    public void process(MessageExchange arg0) throws Exception {
+        // Do nothing. In our case, this method should never be called
+        // as we only send synchronous InOnly exchange
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.servicemix.components.util.PollingComponentSupport#poll()
+     */
+    public void poll() throws Exception {
+        LOG.debug("Polling mailfolder " + config.getFolderName() + " at host " + config.getHost() + "...");
+
+        Store store = null;
+        Folder folder = null;
+        Session session = null;
+        try {
+            Properties props = MailUtils.getPropertiesForProtocol(this.config, this.customTrustManagers);
+            props.put("mail.debug", isDebugMode() ? "true" : "false");
+
+            // Get session
+            session = Session.getInstance(props, config.getAuthenticator());
+
+            // debug the session
+            session.setDebug(this.debugMode);
+
+            store = session.getStore(config.getProtocol());
+            store.connect(config.getHost(), config.getUsername(), config.getPassword());
+            folder = store.getFolder(config.getFolderName());
+            if (folder == null || !folder.exists()) {
+                throw new Exception("Folder not found or invalid: " + config.getFolderName());
+            }
+            folder.open(Folder.READ_WRITE);
+
+            int msgCount = 0;
+            // check for max fetch size
+            if (this.maxFetchSize == -1) {
+                // -1 means no restrictions at all - so poll all messages
+                msgCount = folder.getMessageCount();
+            } else {
+                // poll only the set max fetch size
+                msgCount = Math.min(this.maxFetchSize, folder.getMessageCount());
+            }
+
+            for (int i = 1; i <= msgCount; i++) {
+                // get the message
+                MimeMessage mailMsg = (MimeMessage)folder.getMessage(i);
+
+                // check if the message may be processed
+                if (isProcessOnlyUnseenMessages() && mailMsg.isSet(Flags.Flag.SEEN)) {
+                    // this message should not be processed because
+                    // the configuration says to process only unseen messages
+                    LOG.debug("Skipped seen mail: " + mailMsg.getSubject());
+                    continue;
+                }
+
+                // create a inOnly exchange
+                InOnly io = getExchangeFactory().createInOnlyExchange();
+
+                // configure the exchange target
+                configureExchangeTarget(io);
+
+                // create the in message
+                NormalizedMessage normalizedMessage = io.createMessage();
+
+                // now let the marshaller convert the mail into a normalized
+                // message to send to jbi bus
+                marshaler.convertMailToJBI(io, normalizedMessage, mailMsg);
+
+                // then put the in message into the inOnly exchange
+                io.setInMessage(normalizedMessage);
+
+                // and use sendSync to deliver it
+                sendSync(io);
+
+                // now check if delivery succeeded or went wrong
+                if (io.getStatus() == ExchangeStatus.ERROR) {
+                    Exception e = io.getError();
+                    if (e == null) {
+                        e = new JBIException("Unexpected error: " + e.getMessage());
+                    }
+                    throw e;
+                } else {
+                    // then mark the mail as processed (only if no errors)
+                    if (deleteProcessedMessages) {
+                        // processed messages have to be marked as deleted
+                        mailMsg.setFlag(Flags.Flag.DELETED, true);
+                    } else {
+                        // processed messages have to be marked as seen
+                        mailMsg.setFlag(Flags.Flag.SEEN, true);
+                    }
+                }
+            }
+        } finally {
+            // finally clean up and close the folder and store
+            try {
+                if (folder != null) {
+                    folder.close(true);
+                }
+                if (store != null) {
+                    store.close();
+                }
+            } catch (Exception ignored) {
+                logger.debug(ignored);
+            }
+        }
+    }
+
+    /**
+     * @return the deleteProcessedMessages
+     */
+    public boolean isDeleteProcessedMessages() {
+        return this.deleteProcessedMessages;
+    }
+
+    /**
+     * @param deleteProcessedMessages the deleteProcessedMessages to set
+     */
+    public void setDeleteProcessedMessages(boolean deleteProcessedMessages) {
+        this.deleteProcessedMessages = deleteProcessedMessages;
+    }
+
+    /**
+     * @return the marshaler
+     */
+    public AbstractMailMarshaler getMarshaler() {
+        return this.marshaler;
+    }
+
+    /**
+     * @param marshaler the marshaler to set
+     */
+    public void setMarshaler(AbstractMailMarshaler marshaler) {
+        this.marshaler = marshaler;
+    }
+
+    /**
+     * @return the maxFetchSize
+     */
+    public int getMaxFetchSize() {
+        return this.maxFetchSize;
+    }
+
+    /**
+     * @param maxFetchSize the maxFetchSize to set
+     */
+    public void setMaxFetchSize(int maxFetchSize) {
+        this.maxFetchSize = maxFetchSize;
+    }
+
+    /**
+     * @return the processOnlyUnseenMessages
+     */
+    public boolean isProcessOnlyUnseenMessages() {
+        return this.processOnlyUnseenMessages;
+    }
+
+    /**
+     * @param processOnlyUnseenMessages the processOnlyUnseenMessages to set
+     */
+    public void setProcessOnlyUnseenMessages(boolean processOnlyUnseenMessages) {
+        this.processOnlyUnseenMessages = processOnlyUnseenMessages;
+    }
+
+    /**
+     * returns the connection uri used for this poller endpoint
+     * 
+     * @return Returns the connection.
+     */
+    public String getConnection() {
+        return this.connection;
+    }
+
+    /**
+     * sets the connection uri
+     * 
+     * @param connection The connection to set.
+     */
+    public void setConnection(String connection) {
+        this.connection = connection;
+        try {
+            this.config = MailUtils.configure(this.connection);
+        } catch (ParseException ex) {
+            LOG.error("The configured connection uri is invalid", ex);
+        }
+    }
+
+    /**
+     * @return the debugMode
+     */
+    public boolean isDebugMode() {
+        return this.debugMode;
+    }
+
+    /**
+     * @param debugMode the debugMode to set
+     */
+    public void setDebugMode(boolean debugMode) {
+        this.debugMode = debugMode;
+    }
+
+    /**
+     * @return the customTrustManagers
+     */
+    public String getCustomTrustManagers() {
+        return this.customTrustManagers;
+    }
+
+    /**
+     * @param customTrustManagers the customTrustManagers to set
+     */
+    public void setCustomTrustManagers(String customTrustManagers) {
+        this.customTrustManagers = customTrustManagers;
+    }
+}

Added: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java (added)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/MailSenderEndpoint.java Thu Mar  6 04:58:09 2008
@@ -0,0 +1,248 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.mail;
+
+import java.util.Properties;
+
+import javax.jbi.management.DeploymentException;
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.ParseException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.servicemix.common.endpoints.ProviderEndpoint;
+
+import org.apache.servicemix.jbi.jaxp.StringSource;
+
+import org.apache.servicemix.mail.marshaler.AbstractMailMarshaler;
+import org.apache.servicemix.mail.marshaler.DefaultMailMarshaler;
+import org.apache.servicemix.mail.utils.MailConnectionConfiguration;
+import org.apache.servicemix.mail.utils.MailUtils;
+
+/**
+ * this is the sending endpoint for the mail component
+ * 
+ * @org.apache.xbean.XBean element="sender"
+ * @author lhein
+ */
+public class MailSenderEndpoint extends ProviderEndpoint implements MailEndpointType {
+    private static final transient Log LOG = LogFactory.getLog(MailSenderEndpoint.class);
+
+    private AbstractMailMarshaler marshaler = new DefaultMailMarshaler();
+    private MailConnectionConfiguration config;
+    private String customTrustManagers;
+    private String connection;
+    private String sender;
+    private boolean debugMode;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.servicemix.common.Endpoint#validate()
+     */
+    public void validate() throws DeploymentException {
+        super.validate();
+
+        if (this.config == null || this.connection == null) {
+            throw new DeploymentException("No valid connection uri provided.");
+        }
+        if (this.sender == null) {
+            this.sender = this.marshaler != null
+                ? this.marshaler.getDefaultSenderForOutgoingMails() : AbstractMailMarshaler.DEFAULT_SENDER;
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.servicemix.common.endpoints.ProviderEndpoint#processInOnly(javax.jbi.messaging.MessageExchange,
+     *      javax.jbi.messaging.NormalizedMessage)
+     */
+    @Override
+    protected void processInOnly(MessageExchange exchange, NormalizedMessage in) throws Exception {
+        // Exchange is finished
+        if (exchange.getStatus() == ExchangeStatus.DONE) {
+            return;
+        } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
+            // Exchange has been aborted with an exception
+            return;
+        } else if (exchange.getFault() != null) {
+            // Fault message
+            exchange.setStatus(ExchangeStatus.DONE);
+            getChannel().send(exchange);
+        } else {
+            Session session = null;
+            try {
+                Properties props = MailUtils.getPropertiesForProtocol(this.config, this.customTrustManagers);
+                props.put("mail.debug", isDebugMode() ? "true" : "false");
+
+                // Get session
+                session = Session.getInstance(props, config.getAuthenticator());
+
+                // debug the session
+                session.setDebug(this.debugMode);
+
+                // Define message
+                MimeMessage msg = new MimeMessage(session);
+
+                // let the marshaler to the conversion of message to mail
+                this.marshaler.convertJBIToMail(msg, exchange, in, this.sender);
+
+                // Send message
+                Transport.send(msg);
+            } catch (MessagingException mex) {
+                logger.error("Error sending mail...", mex);
+                throw mex;
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.servicemix.common.endpoints.ProviderEndpoint#processInOut(javax.jbi.messaging.MessageExchange,
+     *      javax.jbi.messaging.NormalizedMessage, javax.jbi.messaging.NormalizedMessage)
+     */
+    @Override
+    protected void processInOut(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out)
+        throws Exception {
+        // Exchange is finished
+        if (exchange.getStatus() == ExchangeStatus.DONE) {
+            return;
+        } else if (exchange.getStatus() == ExchangeStatus.ERROR) {
+            // Exchange has been aborted with an exception
+            return;
+        } else if (exchange.getFault() != null) {
+            // Fault message
+            exchange.setStatus(ExchangeStatus.DONE);
+            getChannel().send(exchange);
+        } else {
+            Session session = null;
+            try {
+                Properties props = MailUtils.getPropertiesForProtocol(this.config, this.customTrustManagers);
+                props.put("mail.debug", isDebugMode() ? "true" : "false");
+
+                // Get session
+                session = Session.getInstance(props, config.getAuthenticator());
+
+                // debug the session
+                session.setDebug(this.debugMode);
+
+                // Define message
+                MimeMessage msg = new MimeMessage(session);
+
+                // let the marshaler to the conversion of message to mail
+                this.marshaler.convertJBIToMail(msg, exchange, in, this.sender);
+
+                // Send message
+                Transport.send(msg);
+
+                // quit the exchange
+                out.setContent(new StringSource("<ack />"));
+            } catch (MessagingException mex) {
+                logger.error("Error sending mail...", mex);
+                throw mex;
+            }
+        }
+    }
+
+    /**
+     * @return the marshaler
+     */
+    public AbstractMailMarshaler getMarshaler() {
+        return this.marshaler;
+    }
+
+    /**
+     * @param marshaler the marshaler to set
+     */
+    public void setMarshaler(AbstractMailMarshaler marshaler) {
+        this.marshaler = marshaler;
+    }
+
+    /**
+     * @return the sender
+     */
+    public String getSender() {
+        return this.sender;
+    }
+
+    /**
+     * @param sender the sender to set
+     */
+    public void setSender(String sender) {
+        this.sender = sender;
+    }
+
+    /**
+     * returns the connection uri used for this poller endpoint
+     * 
+     * @return Returns the connection.
+     */
+    public String getConnection() {
+        return this.connection;
+    }
+
+    /**
+     * sets the connection uri
+     * 
+     * @param connection The connection to set.
+     */
+    public void setConnection(String connection) {
+        this.connection = connection;
+        try {
+            this.config = MailUtils.configure(this.connection);
+        } catch (ParseException ex) {
+            LOG.error("The configured connection uri is invalid", ex);
+        }
+    }
+
+    /**
+     * @return the debugMode
+     */
+    public boolean isDebugMode() {
+        return this.debugMode;
+    }
+
+    /**
+     * @param debugMode the debugMode to set
+     */
+    public void setDebugMode(boolean debugMode) {
+        this.debugMode = debugMode;
+    }
+
+    /**
+     * @return the customTrustManagers
+     */
+    public String getCustomTrustManagers() {
+        return this.customTrustManagers;
+    }
+
+    /**
+     * @param customTrustManagers the customTrustManagers to set
+     */
+    public void setCustomTrustManagers(String customTrustManagers) {
+        this.customTrustManagers = customTrustManagers;
+    }
+}

Added: servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java?rev=634253&view=auto
==============================================================================
--- servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java (added)
+++ servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-mail/src/main/java/org/apache/servicemix/mail/marshaler/AbstractMailMarshaler.java Thu Mar  6 04:58:09 2008
@@ -0,0 +1,218 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.mail.marshaler;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.activation.DataSource;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.mail.internet.MimeMessage;
+
+import org.apache.servicemix.components.util.MarshalerSupport;
+
+/**
+ * this is the abstract super class of all marshalers which want to convert
+ * between normalized messages and mail messages and vice versa.
+ * 
+ * @author lhein
+ */
+public abstract class AbstractMailMarshaler extends MarshalerSupport {
+    /**
+     * ------------------------------------------------------------------------
+     * the mail tags are used for parsing a mime mail for specific tags
+     * ------------------------------------------------------------------------
+     */
+
+    /**
+     * this is the tag for the "To" field of the email
+     */
+    public static final String MAIL_TAG_TO = "To";
+
+    /**
+     * this is the tag for the "Cc" field of the email
+     */
+    public static final String MAIL_TAG_CC = "Cc";
+
+    /**
+     * this is the tag for the "Bcc" field of the email
+     */
+    public static final String MAIL_TAG_BCC = "Bcc";
+
+    /**
+     * this is the tag for the "From" field of the email
+     */
+    public static final String MAIL_TAG_FROM = "From";
+
+    /**
+     * this is the tag for the "Subject" field of the email
+     */
+    public static final String MAIL_TAG_SUBJECT = "Subject";
+
+    /**
+     * this is the tag for the "Reply-To" field of the email
+     */
+    public static final String MAIL_TAG_REPLYTO = "Reply-To";
+
+    /**
+     * this is the tag for the "Date" field of the email
+     */
+    public static final String MAIL_TAG_SENTDATE = "Date";
+
+    /**
+     * ------------------------------------------------------------------------
+     * the email constants are used for transporting specific information in 
+     * message properties
+     * ------------------------------------------------------------------------
+     */
+
+    /**
+     * this tag is used in normalized messages to represent the address the 
+     * mail was sent to OR the address this exchange should be mailed to
+     */
+    public static final String MSG_TAG_TO = "org.apache.servicemix.mail.to";
+
+    /**
+     * this tag is used in normalized messages to represent the CC address the 
+     * mail was sent to OR the CC address this exchange should be mailed to
+     */
+    public static final String MSG_TAG_CC = "org.apache.servicemix.mail.cc";
+
+    /**
+     * this tag is used in normalized messages to represent the BCC address 
+     * this exchange should be mailed to
+     */
+    public static final String MSG_TAG_BCC = "org.apache.servicemix.mail.bcc";
+
+    /**
+     * this tag is used in normalized messages to represent the address the 
+     * mail was received from OR the address this exchange should be sent from
+     */
+    public static final String MSG_TAG_FROM = "org.apache.servicemix.mail.from";
+
+    /**
+     * this tag is used in normalized messages to represent the text portion 
+     * of the mail received OR the text portion of the mail to be sent
+     * if both html and text properties are set, then it will be a multipart
+     * mail message containing both
+     */
+    public static final String MSG_TAG_TEXT = "org.apache.servicemix.mail.text";
+
+    /**
+     * this tag is used in normalized messages to represent the html portion 
+     * of the mail received OR the html portion of the mail to be sent
+     * if both html and text properties are set, then it will be a multipart
+     * mail message containing both 
+     */
+    public static final String MSG_TAG_HTML = "org.apache.servicemix.mail.html";
+
+    /**
+     * this tag is used in normalized messages to represent the subject of the 
+     * mail received OR the subject of the mail to be sent
+     */
+    public static final String MSG_TAG_SUBJECT = "org.apache.servicemix.mail.subject";
+
+    /**
+     * this tag is used in normalized messages to represent the reply-to address
+     * of the mail received OR the reply-to address of the mail to be sent
+     */
+    public static final String MSG_TAG_REPLYTO = "org.apache.servicemix.mail.replyto";
+
+    /**
+     * this tag is used in normalized messages to represent the date when  
+     * the mail was sent
+     */
+    public static final String MSG_TAG_SENTDATE = "org.apache.servicemix.mail.sentdate";
+
+    /**
+     * this tag is used in normalized messages to represent the alternative
+     * content of a multipart/related message type
+     */
+    public static final String MSG_TAG_ALTERNATIVE_CONTENT = "org.apache.servicemix.mail.alternativecontent";
+
+    /**
+     * the default sender address for outgoing mails
+     */
+    public static final String DEFAULT_SENDER = "no-reply@localhost";
+
+    /**
+     * This method is used to convert a mime mail message received via an 
+     * email server into a normalized message which will be sent to the bus.
+     * If you want to specify your own conversion behaviour you have to override
+     * this method with your own logic.
+     * 
+     * @param exchange  the message exchange that will be sent to the bus
+     * @param nmsg      the normalized in-message to be filled by this method
+     * @param mailMsg   the mail message that was received via mail server
+     * @throws javax.mail.MessagingException on any conversion errors
+     */
+    public abstract void convertMailToJBI(MessageExchange exchange, NormalizedMessage nmsg,
+                                          MimeMessage mailMsg) throws javax.mail.MessagingException;
+
+    /**
+     * This method is used to convert a normalized message from the bus into a
+     * mime mail message to be sent to a mail server.
+     * If you want to specify your own conversion behaviour you have to override
+     * this method with your own logic. 
+     * 
+     * @param mimeMessage       the mime mail message to be filled by this method
+     * @param exchange          the message exchange from JBI bus
+     * @param nmsg              the normalized message to transform to mail message
+     * @param configuredSender  the sender configured in the xbean
+     * @throws javax.mail.MessagingException on conversion errors
+     */
+    public abstract void convertJBIToMail(MimeMessage mimeMessage, MessageExchange exchange,
+                                          NormalizedMessage nmsg, String configuredSender) throws javax.mail.MessagingException;
+
+    /**
+     * returns the default sender for outgoing mails
+     * Override this method to deliver your own default sender!
+     * 
+     * @return  the default sender address as string
+     */
+    public String getDefaultSenderForOutgoingMails() {
+        return AbstractMailMarshaler.DEFAULT_SENDER;
+    }
+
+    /**
+     * This helper method extracts all attachments from the normalized message 
+     * into a map of attachments which may be used for filling the attachments
+     * of an outgoing mail
+     * 
+     * @param normalizedMessage     the normalized message with attachments
+     * @return  a map of attachments
+     */
+    protected final Map<String, DataSource> getAttachmentsMapFromNormalizedMessage(
+                                                                                   NormalizedMessage normalizedMessage) {
+        // get attachment from Normalize Message (used for sending)
+        Map<String, DataSource> attachments = new HashMap<String, DataSource>();
+        String oneAttachmentName = "";
+        Set attNames = normalizedMessage.getAttachmentNames();
+        Iterator itAttNames = attNames.iterator();
+        while (itAttNames.hasNext()) {
+            oneAttachmentName = (String)itAttNames.next();
+            DataSource oneAttchmentInputString = normalizedMessage.getAttachment(oneAttachmentName)
+                .getDataSource();
+            attachments.put(oneAttachmentName, oneAttchmentInputString);
+        }
+
+        return attachments;
+    }
+}