Repository: tomee Updated Branches: refs/heads/master 2fc95dcfc -> 4f49f2b36
Javamail API Example Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/4f49f2b3 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/4f49f2b3 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/4f49f2b3 Branch: refs/heads/master Commit: 4f49f2b3677a1caa59ad4c52dcdd45e57660e5d1 Parents: 2fc95dc Author: andygumbre...@apache.org <andy...@gmx.de> Authored: Thu Jun 18 12:08:17 2015 +0200 Committer: andygumbre...@apache.org <andy...@gmx.de> Committed: Thu Jun 18 12:08:17 2015 +0200 ---------------------------------------------------------------------- .gitignore | 1 + examples/javamail/README.md | 184 +++++++++++++++++++ examples/javamail/pom.xml | 104 +++++++++++ .../java/org/superbiz/rest/EmailService.java | 72 ++++++++ .../org/superbiz/rest/EmailServiceTest.java | 47 +++++ examples/pom.xml | 1 + 6 files changed, 409 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index 6fe2ebd..9bbb2a3 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ quick.bat /tomee/tomee-plume-webapp/overlays/ /tomee/tomee-plus-webapp/overlays/ /temp +/report.txt http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/javamail/README.md ---------------------------------------------------------------------- diff --git a/examples/javamail/README.md b/examples/javamail/README.md new file mode 100644 index 0000000..89be081 --- /dev/null +++ b/examples/javamail/README.md @@ -0,0 +1,184 @@ +Title: Javamail API + +This is just a simple example to demonstrate a very basic usage of the API. It should be enough to get you started using the java mail packages. + +#The Code + +## A simple REST service using the Javamail API + +Here we see a very simple RESTful endpoint that can be called with a message to send by Email. It would not be hard to modify the application to provide +more useful configuration options. As is, this will not send anything, but if you change the parameters to match your mail server then you'll see the message being sent. +You can find much more detailed information on the [Javamail API here](https://java.net/projects/javamail/pages/Home#Samples) + + package org.superbiz.rest; + + import javax.mail.Authenticator; + import javax.mail.Message; + import javax.mail.MessagingException; + import javax.mail.PasswordAuthentication; + import javax.mail.Session; + import javax.mail.Transport; + import javax.mail.internet.InternetAddress; + import javax.mail.internet.MimeMessage; + import javax.ws.rs.POST; + import javax.ws.rs.Path; + import java.util.Date; + import java.util.Properties; + + @Path("/email") + public class EmailService { + + @POST + public String lowerCase(final String message) { + + try { + + //Create some properties and get the default Session + final Properties props = new Properties(); + props.put("mail.smtp.host", "your.mailserver.host"); + props.put("mail.debug", "true"); + + final Session session = Session.getInstance(props, new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication("MyUsername", "MyPassword"); + } + }); + + //Set this just to see some internal logging + session.setDebug(true); + + //Create a message + final MimeMessage msg = new MimeMessage(session); + msg.setFrom(new InternetAddress("your@email.address")); + final InternetAddress[] address = {new InternetAddress("gene...@tomitribe.com")}; + msg.setRecipients(Message.RecipientType.TO, address); + msg.setSubject("JavaMail API test"); + msg.setSentDate(new Date()); + msg.setText(message, "UTF-8"); + + + Transport.send(msg); + } catch (MessagingException e) { + return "Failed to send message: " + e.getMessage(); + } + + return "Sent"; + } + } + +# Testing + +## Test for the JAXRS service + +The test uses the OpenEJB ApplicationComposer to make it trivial. + +The idea is first to activate the jaxrs services. This is done using @EnableServices annotation. + +Then we create on the fly the application simply returning an object representing the web.xml. Here we simply +use it to define the context root but you can use it to define your REST Application too. And to complete the +application definition we add @Classes annotation to define the set of classes to use in this app. + +Finally to test it we use cxf client API to call the REST service post() method. + + package org.superbiz.rest; + + import org.apache.cxf.jaxrs.client.WebClient; + import org.apache.openejb.jee.WebApp; + import org.apache.openejb.junit.ApplicationComposer; + import org.apache.openejb.testing.Classes; + import org.apache.openejb.testing.EnableServices; + import org.apache.openejb.testing.Module; + import org.junit.Test; + import org.junit.runner.RunWith; + + import java.io.IOException; + + import static org.junit.Assert.assertEquals; + + @EnableServices(value = "jaxrs") + @RunWith(ApplicationComposer.class) + public class EmailServiceTest { + + @Module + @Classes(EmailService.class) + public WebApp app() { + return new WebApp().contextRoot("test"); + } + + @Test + public void post() throws IOException { + final String message = WebClient.create("http://localhost:4204").path("/test/email/").post("Hello Tomitribe", String.class); + assertEquals("Failed to send message: Unknown SMTP host: your.mailserver.host", message); + } + } + +#Running + +Running the example is fairly simple. In the "javamail-api" directory run: + + $ mvn clean install + +Which should create output like the following. + + INFO - Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed. + INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) + INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) + INFO - Creating TransactionManager(id=Default Transaction Manager) + INFO - Creating SecurityService(id=Default Security Service) + INFO - Initializing network services + INFO - Creating ServerService(id=cxf-rs) + INFO - Creating ServerService(id=httpejbd) + INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to (200) threads with a queue of (9) + INFO - Initializing network services + INFO - ** Bound Services ** + INFO - NAME IP PORT + INFO - httpejbd 127.0.0.1 4204 + INFO - ------- + INFO - Ready! + INFO - Configuring enterprise application: D:\github\tomee\examples\javamail\EmailServiceTest + INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) + INFO - Auto-creating a container for bean org.superbiz.rest.EmailServiceTest: Container(type=MANAGED, id=Default Managed Container) + INFO - Creating Container(id=Default Managed Container) + INFO - Using directory D:\windows\tmp for stateful session passivation + INFO - Configuring Service(id=comp/DefaultManagedExecutorService, type=Resource, provider-id=Default Executor Service) + INFO - Auto-creating a Resource with id 'comp/DefaultManagedExecutorService' of type 'javax.enterprise.concurrent.ManagedExecutorService for 'test'. + INFO - Configuring Service(id=comp/DefaultManagedScheduledExecutorService, type=Resource, provider-id=Default Scheduled Executor Service) + INFO - Auto-creating a Resource with id 'comp/DefaultManagedScheduledExecutorService' of type 'javax.enterprise.concurrent.ManagedScheduledExecutorService for 'test'. + INFO - Configuring Service(id=comp/DefaultManagedThreadFactory, type=Resource, provider-id=Default Managed Thread Factory) + INFO - Auto-creating a Resource with id 'comp/DefaultManagedThreadFactory' of type 'javax.enterprise.concurrent.ManagedThreadFactory for 'test'. + INFO - Enterprise application "D:\github\tomee\examples\javamail\EmailServiceTest" loaded. + INFO - Creating dedicated application classloader for EmailServiceTest + INFO - Assembling app: D:\github\tomee\examples\javamail\EmailServiceTest + INFO - Using providers: + INFO - org.apache.johnzon.jaxrs.JohnzonProvider@2687f956 + INFO - org.apache.cxf.jaxrs.provider.JAXBElementProvider@1ded7b14 + INFO - org.apache.johnzon.jaxrs.JsrProvider@29be7749 + INFO - org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@5f84abe8 + INFO - org.apache.openejb.server.cxf.rs.EJBAccessExceptionMapper@4650a407 + INFO - org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@30135202 + INFO - REST Application: http://127.0.0.1:4204/test/ -> org.apache.openejb.server.rest.InternalApplication + INFO - Service URI: http://127.0.0.1:4204/test/email -> Pojo org.superbiz.rest.EmailService + INFO - POST http://127.0.0.1:4204/test/email/ -> String lowerCase(String) + INFO - Deployed Application(path=D:\github\tomee\examples\javamail\EmailServiceTest) + DEBUG: JavaMail version 1.4ea + DEBUG: java.io.FileNotFoundException: D:\java\jdk8\jre\lib\javamail.providers (The system cannot find the file specified) + DEBUG: !anyLoaded + DEBUG: not loading resource: /META-INF/javamail.providers + DEBUG: successfully loaded resource: /META-INF/javamail.default.providers + DEBUG: Tables of loaded providers + DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]} + DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]} + DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map + DEBUG: !anyLoaded + DEBUG: not loading resource: /META-INF/javamail.address.map + DEBUG: java.io.FileNotFoundException: D:\java\jdk8\jre\lib\javamail.address.map (The system cannot find the file specified) + DEBUG: setDebug: JavaMail version 1.4ea + DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] + DEBUG SMTP: useEhlo true, useAuth false + DEBUG SMTP: trying to connect to host "your.mailserver.host", port 25, isSSL false + INFO - Undeploying app: D:\github\tomee\examples\javamail\EmailServiceTest + INFO - Stopping network services + INFO - Stopping server services + + http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/javamail/pom.xml ---------------------------------------------------------------------- diff --git a/examples/javamail/pom.xml b/examples/javamail/pom.xml new file mode 100644 index 0000000..c70a85a --- /dev/null +++ b/examples/javamail/pom.xml @@ -0,0 +1,104 @@ +<?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>org.superbiz</groupId> + <artifactId>javamail-api</artifactId> + <version>1.1.0-SNAPSHOT</version> + <name>OpenEJB :: Examples :: JavaMail API</name> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <build> + <defaultGoal>install</defaultGoal> + + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.2</version> + <configuration> + <source>1.7</source> + <target>1.7</target> + </configuration> + </plugin> + </plugins> + </build> + + <repositories> + <repository> + <id>apache-m2-snapshot</id> + <name>Apache Snapshot Repository</name> + <url>https://repository.apache.org/content/groups/snapshots</url> + </repository> + </repositories> + + <dependencies> + <dependency> + <groupId>org.apache.tomee</groupId> + <artifactId>javaee-api</artifactId> + <version>7.0-SNAPSHOT</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>javax.mail</groupId> + <artifactId>mail</artifactId> + <version>1.4</version> + <scope>provided</scope> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + </dependency> + + <!-- + The <scope>test</scope> guarantees that non of your runtime + code is dependent on any OpenEJB classes. + --> + <dependency> + <groupId>org.apache.tomee</groupId> + <artifactId>openejb-cxf-rs</artifactId> + <version>7.0.0-SNAPSHOT</version> + <scope>test</scope> + </dependency> + </dependencies> + + <!-- + This section allows you to configure where to publish libraries for sharing. + It is not required and may be deleted. For more information see: + http://maven.apache.org/plugins/maven-deploy-plugin/ + --> + <distributionManagement> + <repository> + <id>localhost</id> + <url>file://${basedir}/target/repo/</url> + </repository> + <snapshotRepository> + <id>localhost</id> + <url>file://${basedir}/target/snapshot-repo/</url> + </snapshotRepository> + </distributionManagement> +</project> http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/javamail/src/main/java/org/superbiz/rest/EmailService.java ---------------------------------------------------------------------- diff --git a/examples/javamail/src/main/java/org/superbiz/rest/EmailService.java b/examples/javamail/src/main/java/org/superbiz/rest/EmailService.java new file mode 100644 index 0000000..504ea16 --- /dev/null +++ b/examples/javamail/src/main/java/org/superbiz/rest/EmailService.java @@ -0,0 +1,72 @@ +/** + * 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.superbiz.rest; + +import javax.mail.Authenticator; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.PasswordAuthentication; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import java.util.Date; +import java.util.Properties; + +@Path("/email") +public class EmailService { + + @POST + public String lowerCase(final String message) { + + try { + + //Create some properties and get the default Session + final Properties props = new Properties(); + props.put("mail.smtp.host", "your.mailserver.host"); + props.put("mail.debug", "true"); + + final Session session = Session.getInstance(props, new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication("MyUsername", "MyPassword"); + } + }); + + //Set this just to see some internal logging + session.setDebug(true); + + //Create a message + final MimeMessage msg = new MimeMessage(session); + msg.setFrom(new InternetAddress("your@email.address")); + final InternetAddress[] address = {new InternetAddress("gene...@tomitribe.com")}; + msg.setRecipients(Message.RecipientType.TO, address); + msg.setSubject("JavaMail API test"); + msg.setSentDate(new Date()); + msg.setText(message, "UTF-8"); + + + Transport.send(msg); + } catch (final MessagingException e) { + return "Failed to send message: " + e.getMessage(); + } + + return "Sent"; + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/javamail/src/test/java/org/superbiz/rest/EmailServiceTest.java ---------------------------------------------------------------------- diff --git a/examples/javamail/src/test/java/org/superbiz/rest/EmailServiceTest.java b/examples/javamail/src/test/java/org/superbiz/rest/EmailServiceTest.java new file mode 100644 index 0000000..856cce5 --- /dev/null +++ b/examples/javamail/src/test/java/org/superbiz/rest/EmailServiceTest.java @@ -0,0 +1,47 @@ +/** + * 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.superbiz.rest; + +import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.openejb.jee.WebApp; +import org.apache.openejb.junit.ApplicationComposer; +import org.apache.openejb.testing.Classes; +import org.apache.openejb.testing.EnableServices; +import org.apache.openejb.testing.Module; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; + +@EnableServices(value = "jaxrs") +@RunWith(ApplicationComposer.class) +public class EmailServiceTest { + + @Module + @Classes(EmailService.class) + public WebApp app() { + return new WebApp().contextRoot("test"); + } + + @Test + public void post() throws IOException { + final String message = WebClient.create("http://localhost:4204").path("/test/email/").post("Hello Tomitribe", String.class); + assertEquals("Failed to send message: Unknown SMTP host: your.mailserver.host", message); + } +} http://git-wip-us.apache.org/repos/asf/tomee/blob/4f49f2b3/examples/pom.xml ---------------------------------------------------------------------- diff --git a/examples/pom.xml b/examples/pom.xml index 2cfc901..ef1c344 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -81,6 +81,7 @@ <module>injection-of-entitymanager</module> <module>injection-of-env-entry</module> <module>interceptors</module> + <module>javamail</module> <module>jpa-eclipselink</module> <module>jpa-hibernate</module> <module>jpa-enumerated</module>