Java API for XML-Based Web Services (JAX-WS) supports two different service endpoint implementations types, the standard JavaBeans service endpoint interface and a new Provider interface to enable services to work at the XML message level. By using annotations on the service endpoint or client, you can define the service endpoint as a Web service.
This task is a required step to develop a JAX-WS Web service from JavaBeans components.
JAX-WS technology enables the implementation of Web services based on both the standard JavaBeans service endpoint interface and a new Provider interface. JavaBeans endpoints in JAX-WS are similar to the endpoint implementations in the Java API for XML-based RPC (JAX-RPC) specification. Unlike JAX-RPC, the requirement for a service endpoint interface (SEI) is optional for JavaBeans-based services. JAX-WS services that do not have an associated SEI are regarded as having an implicit SEI, whereas services that have an associated SEI are regarded as having an explicit SEI. The service endpoint interfaces required by JAX-WS are also more generic than the service endpoint interfaces required by JAX-RPC. With JAX-WS, the SEI is not required to extend the java.rmi.Remote interface as required by the JAX-RPC specification.
The JAX-WS programming model also leverages support for annotating Java classes with metadata to define a service endpoint application as a Web service and define how a client can access the Web service. JAX-WS supports annotations based on the Metadata Facility for the Java Programming Language (JSR 175) specification, the Web Services Metadata for the Java Platform (JSR 181) specification and annotations defined by the JAX-WS 2.0 (JSR 224) specification, which includes Java Architecture for XML Binding (JAXB) annotations. Using annotations, the service endpoint implementation can independently describe the Web service without requiring a WSDL file. Annotations can provide all of the WSDL information necessary to configure your service endpoint implementation or Web services client. You can specify annotations on the service endpoint interface used by the client and the server, or on the server-side service implementation class.
To develop a JAX-WS Web service, you must annotate your Java class with the javax.jws.WebService annotation for JavaBeans endpoints or the javax.jws.WebServiceProvider annotation for a Provider endpoint. These annotations define the Java class as a Web service endpoint. For a JavaBeans endpoint, the service endpoint interface or service endpoint implementation is a Java interface or class, respectively, that declares the business methods provided by a particular Web service. The only methods on a JavaBeans endpoint that can be invoked by a Web services client are the business methods that are defined in the explicit or implicit service endpoint interface.
All JavaBeans endpoints are required to have the @WebService (javax.jws.WebService) annotation included on the bean class. If the service implementation bean also uses an SEI, then that endpoint interface must be referenced by the endpointInterface attribute on that annotation. If the service implementation bean does not use an SEI, then the service is described by the implicit SEI defined in the bean.
The JAX-WS programming model introduces the new Provider API, javax.xml.ws.Provider, as an alternative to service endpoint interfaces. The Provider interface supports a more messaging oriented approach to Web services. With the Provider interface, you can create a Java class that implements a simple interface to produce a generic service implementation class. The Provider interface has one method, the invoke method, which uses generics to control both the input and output types when working with various messages or message payloads. All Provider endpoints must be annotated with the @WebServiceProvider (javax.xml.ws.WebServiceProvider) annotation. A service implementation cannot specify the @WebService annotation if it implements the javax.xml.ws.Provider interface.
Sample JavaBeans service endpoint implementation and interface
/** This is an excerpt from the service implementation file, EchoServicePortTypeImpl.java package com.ibm.was.wssample.echo; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.transform.stream.StreamSource; @javax.jws.WebService(serviceName = "EchoService", endpointInterface = "com.ibm.was.wssample.echo.EchoServicePortType", targetNamespace="http://com/ibm/was/wssample/echo/", portName="EchoServicePort") public class EchoServicePortTypeImpl implements EchoServicePortType { public EchoServicePortTypeImpl() { } public String invoke(String obj) { String str; .... str = obj; .... return str; } }
/** This is a sample EchoServicePortType.java service interface */ import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.ws.*; @WebService(name = "EchoServicePortType", targetNamespace = "http://com/ibm/was/wssample/echo/", wsdlLocation="WEB-INF/wsdl/Echo.wsdl") public interface EchoServicePortType { /** ...the method process ...*/ @WebMethod @WebResult(name = "response", targetNamespace = "http://com/ibm/was/wssample/echo/") @RequestWrapper(localName = "invoke", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.Invoke") @ResponseWrapper(localName = "echoStringResponse", targetNamespace = "http://com/ibm/was/wssample/echo/", className = "com.ibm.was.wssample.echo.EchoStringResponse") public String invoke( @WebParam(name = "arg0", targetNamespace = "http://com/ibm/was/wssample/echo/") String arg0); }
Sample Provider endpoint implementation
package jaxws.provider.source; import javax.xml.ws.Provider; import javax.xml.ws.WebServiceProvider; import javax.xml.transform.Source; @WebServiceProvider() public class SourceProvider implements Provider<Source> { public Source invoke(Source data) { return data; } }
In the example, the Provider implementation, the javax.xml.transform.Source type is specified in the generic <Source> method. The generic <Source> method specifies that both the input and output types are Source objects. An endpoint interface that implements the Provider interface must include a @WebServiceProvider annotation.
In this information ...Related tasks
Related reference
| IBM Redbooks, demos, education, and more(Index) |