Depuis quelques temps je suis en train de découvrir le framework Web Service JAX-WS et j'essaye de voir s'il peut être utilisé dans différentes situations non conventionnelles.
A cette occasion, je montre dans ce billet comment il est possible d'utiliser JAX-WS dans un bundle OSGi qui expose des services. Plus précisément, j'utilise les fonctionnalités offertes par Java 6 pour le déploiement de Web Services JAX-WS sans utiliser de serveur d'application. Un serveur intégré à Java 6 est automatiquement créé pour l'occasion.
Une fois créé le bundle (appelé JAXWSWithOSGI), une interface Java doit être définie décrivant le contrat du service OSGI.
Ci-dessous, la classe l'implémentation du service HelloWorldImpl décrit le traitement du Web Service.
Pour utiliser JAX-WS, il faut ajouter les bibliothèques (Jar) de l'implémentation de référence qui est Metro dans le classpath du bundle. La liste des fichiers est donnée ci-dessous :
Il ne reste plus qu'à développer un client JAX-WS en partant de la description WSDL.
A cette occasion, je montre dans ce billet comment il est possible d'utiliser JAX-WS dans un bundle OSGi qui expose des services. Plus précisément, j'utilise les fonctionnalités offertes par Java 6 pour le déploiement de Web Services JAX-WS sans utiliser de serveur d'application. Un serveur intégré à Java 6 est automatiquement créé pour l'occasion.
Une fois créé le bundle (appelé JAXWSWithOSGI), une interface Java doit être définie décrivant le contrat du service OSGI.
@WebServiceA noter que l'annotation @WebService est utilisée pour exposer cette interface comme un Web Service.
public interface IHelloWorldService {
String makeHelloWorld();
}
Ci-dessous, la classe l'implémentation du service HelloWorldImpl décrit le traitement du Web Service.
@WebService(endpointInterface="jaxwswithosgi.IHelloWorldService")Au niveau de la classe Activator (classe utilisée pour la gestion du cycle de vie du bundle), nous définissons au niveau du démarrage du bundle (méthode start) l'instance de l'implémentation du service et l'enregistrement auprès du registre de services du conteneur OSGI. Par la suite, nous utilisons la classe Endpoint pour exposer le service OSGI comme Web Service. A noter que le premier paramètre de la méthode publish permet d'indiquer l'URL de déploiement. De ce fait, cette instruction lancera un serveur Web très léger permettant d'exposer ce Web Service.
public class HelloWorldImpl implements IHelloWorldService {
public String makeHelloWorld() {
return "Hello World";
}
}
public class Activator implements BundleActivator {Dans la méthode stop de la classe Activator, nous indiquons que l'exposition du Web Service doit se terminer.
public void start(BundleContext context) throws Exception {
IHelloWorldService ref = new HelloWorldImpl();
context.registerService(IHelloWorldService.class.getName(), ref, new Hashtable());
publish = Endpoint.publish("http://localhost:8080/IHelloWorldService", ref);
System.out.println("Bundle started.");
}
public void stop(BundleContext context) throws Exception {
publish.stop();
System.out.println("Bundle stopped.");
}
}
Pour utiliser JAX-WS, il faut ajouter les bibliothèques (Jar) de l'implémentation de référence qui est Metro dans le classpath du bundle. La liste des fichiers est donnée ci-dessous :
- webservices-api.jar
- webservices-extra.jar
- webservices-extra-api.jar
- webservices-rt.jar
- webservices-tools.jar
Il ne reste plus qu'à développer un client JAX-WS en partant de la description WSDL.
Aucun commentaire:
Enregistrer un commentaire