Using JAX-WS

The WSDL, JAX-RPC mapping, and webservices.xml files sure are a lot of things to define just to expose your stateless EJB as a web service. It should be easier to publish an EJB as a web service—and it is. One of the goals of the JAX-WS specification was to make the JAX-RPC API and deployment model easier to use. To this end, the specification provides an extensive set of annotations, most of which are based on JSR-181 (“Web Services Metadata for the Java Platform”). These annotations make it much simpler to define a web service. Keeping with the spirit of EJB 3.1, all JAX-WS annotations have reasonable defaults. In the following example, it takes nothing more than adding two annotations to transform a stateless EJB into a web service:

package com.titan.webservice;

import javax.ejb.Stateless;
import javax.jws.WebService;
import javax.jws.WebMethod;

@Stateless
@WebService
public class TravelAgentBean
{
   @WebMethod
   public String makeReservation(int cruiseId, int cabinId,
                                 int customerId, double price) {
   ...
   }
}

The @WebService Annotation

The main annotation for defining a web service is @javax.jws.WebService. This annotation must be placed on the stateless session bean implementation class in order to expose it as a web service:

package javax.jws; @Target({TYPE}) @Retention(value=RetentionPolicy.RUNTIME) public @interface WebService { String name( ) default ""; String targetNamespace( ) default ""; String serviceName( ) default ""; String wsdlLocation( ) default ""; String ...

Get Enterprise JavaBeans 3.1, 6th Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.