The Source for Java Technology Collaboration
User: Password:
Register | Login help    

Search

Online Books:
java.net on MarkMail:


SMTP transport extension for JAX-WS RI

Posted by jitu on May 6, 2007 at 8:05 PM PDT
jax-ws-commons: JAX-WS commons - SMTP transport for JAX-WS

Finally, we (vivek, kohsuke and I) put together a SMTP transport for JAX-WS !! JAX-WS works with various transports and it also provides plugin extensions to write any custom transport. SMTP transport takes advantage of these extensions. SMTP transport is implemented as a custom transport using Adapter extension on the server side and TransportTubeFactory.java on the client side.

Basics

For the communication to happen between "Me" and "You", there needs to be two inboxes: "My Inbox" and "Your Inbox".  "Me" sends request messages to "You" and expect responses in "My Inbox". Similarly,  "You" sends response messages to "My Inbox" in order to reach "Me".

SMTP advantages

  • It is reachable. No server setup is necessary.
  • Great asynchrony. Server need not be there when client sends a request message.

Client-side Programming

You need jaxws-smtp.jar and JavaMail in your classpath for this to work. Typical client code would like this:

public void testSmtp() {
SMTPTransportTube.dump = true; // Enable logging

SMTPFeature feature = new SMTPFeature("smtp.host", "me@sun.com");
feature.setPOP3("pop.host", "uid", "password");
GreetingService proxy =
new GreetingServiceService().getGreetingServicePort(feature);

WSBindingProvider bp = (WSBindingProvider)bp;
bp.setAddress("smtp://you@sun.com");
... = proxy.sayHelloTo("...");
bp.close();
}

This configures SMTPFeature with SMTP(sending) and POP3(receiving) configuration. This feature is used to create proxy. Once the endpoint address is set, then proxy can be used to invoke web service.

Server-side Configuration

JAX-WS SMTP extension can be used with JAX-WS Spring extension for more flexible configuration --- in particular to expose the same endpoint as both HTTP and SMTP. See the sample application for the complete example of how to put this all together by using Maven.

<beans
xmlns:ws ="http://jax-ws.dev.java.net/spring/core"
xmlns:wsm="http://jax-ws.dev.java.net/spring/smtp"
xsi:schemaLocation=
"http://jax-ws.dev.java.net/spring/smtp http://jax-ws.dev.java.net/spring/smtp.xsd
http://jax-ws.dev.java.net/spring/core http://jax-ws.dev.java.net/spring/core.xsd">

<wsm:smtp service="#myservice" incoming="#in" outgoing="#out" />
<wsm:pop3 id="in" host="pop3.Host" uid="uid" password="password" />
<wsm:sender id="out" host="smtp.host" from="server.from@com"/>

<ws:service id="myservice">
<ws:bean>
<bean class="greeter.GreetingService" />
</ws:bean>
</ws:service>

</beans>

Alternatively, you can also configure the srever side programatically without Spring like this.

Testing

We'll be showing a SMTP demo  (along with JSON demo!) in our JavaOne session TS-4948 "Unleashing the Power of JAX-WS RI: Spring, Stateful Web Services, SMTP, and More", so mark your calendars accordingly ...






Comments
Comments are listed in date ascending order (oldest first)