JBoss CXF Web services
Par PlaceOweb le dimanche, août 22 2010, 20:58 - JAVA - Lien permanent
JBoss 6 AS incorpore l'implémentation des web services avec apache CXF. Dans ce tutoriel nous allons voir comment créer un point de terminaison de service Web (endpoint) simple et la façon de déployer et de le tester avec un client.
JBoss 6.0.0.Final, Web Services Apache CXF et Eclipse (3.6 Helios)
Apache CXF est un framework de services Open Source. CXF vous aide à construire et développer des services en utilisant les API de programmation frontend, comme JAX-WS et JAX-RS. Ces services peuvent communiquer avec une variété de protocoles tels que SOAP, XML/HTTP, RESTful HTTP, ou CORBA et fonctionnent sur de nombreux transports variés tels que HTTP, JMS ou JBI. Ces services peuvent parlent une variété de protocoles tels que SOAP, XML / HTTP, RESTful HTTP, ou CORBA et du travail sur une variété de moyens de transport tels que HTTP, JMS ou JBI.
Développer le service Web
Créez un nouveau projet Web dynamique (Dynamic Web Project) à partir du menu d'Eclipse nommé "MyCxfProject" et sélectionnez comme cible d'exécution (Target runtime) et la configuration "JBoss AS 6"
Si vous n'avez pas une version récente de JBoss Tools installé, vous ne pourrez pas voir "JBoss 6" dans la liste communautaire JBoss AS serveur. Cependant le choix de JBoss AS 5 (et pointant vers JBoss AS 6 installation) fonctionnera identiquement et correctement.
Nous allons dans un premier temps ajouter une interface de Web service qui sera utilisé par notre implémentation.
package com.sample; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public interface Math { @WebMethod public long sum(long a, long b); }
et la classe implémentant cet interface de WS:
package com.sample; import javax.jws.WebMethod; import javax.jws.WebService; @WebService(endpointInterface = "com.sample.Math", serviceName = "MathWS") public class MathWS implements Math { public long sum(long a, long b) { System.out.println("Summing " + a + " + " + b); return a + b; } }
Maintenant il est temps d'enregistrer votre service Web en ajoutant votre service Web dans le fichier web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>MathWS</servlet-name> <servlet-class>com.sample.MathWS</servlet-class> </servlet> <servlet-mapping> <servlet-name>MathWS</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
Un Endpoint JAX-WS peut également être configuré à l'aide de fichier Spring XML en plus d'utiliser les API JAX-WS. Une fois que vous avez créé votre application serveur, il vous suffit de fournir le nom de classe et une adresse.
Voici un échantillon jbossws-cxf.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <!-- one or more jaxws:endpoint POJO declarations --> <jaxws:endpoint id="MathWS" address="http://localhost:8080/Samplews" implementor="com.sample.MathWS"> <jaxws:invoker> <bean class="org.jboss.wsf.stack.cxf.InvokerJSE"/> </jaxws:invoker> </jaxws:endpoint> </beans>
Pour plus de détails sur la configuration des services web Apache CXF avec fichier de configuration Apache CXF, référerez vous à http://community.jboss.org/wiki/JBo...
Déployer le service. Si tout compilé correctement, vous devriez voir dans la liste des services déployés (de votre JBossWS Runtime information : Version: jbossws-cxf-3.4.1.GA > View a list of deployed services) votre service mathWS.
Et dans vos logs (server.log), le déploiement de ce projet et du endpoint
23:08:00,506 INFO [org.jboss.wsf.framework.management.DefaultEndpointRegistry] register: jboss.ws:context=MyCxfProject,endpoint=MathWS 23:08:00,523 WARN [org.jboss.wsf.stack.cxf.deployment.aspect.DescriptorDeploymentAspect] Spring not available, skipping check for user provided jbossws-cxf.xml / cxf.xml configuration files. 23:08:00,533 INFO [org.jboss.wsf.stack.cxf.metadata.MetadataBuilder] Add Service id=MathWS address=http://localhost:8080/MyCxfProject implementor=com.sample.MathWS invoker=org.jboss.wsf.stack.cxf.InvokerJSE serviceName={http://sample.com/}MathWS portName={http://sample.com/}MathWSPort wsdlLocation=null mtomEnabled=false 23:08:00,756 INFO [org.apache.cxf.service.factory.ReflectionServiceFactoryBean] Creating Service {http://sample.com/}MathWS from class com.sample.Math 23:08:01,274 INFO [org.apache.cxf.endpoint.ServerImpl] Setting the server's publish address to be http://localhost:8080/MyCxfProject 23:08:01,458 INFO [org.jboss.wsf.stack.cxf.deployment.WSDLFilePublisher] WSDL published to: file:/F:/jboss-6.0.0.Final/server/default/data/wsdl/MyCxfProject.war/MathWS.wsdl 23:08:01,496 INFO [org.jboss.web.tomcat.service.deployers.TomcatDeployment] deploy, ctxPath=/MyCxfProject
Développer un client CXF.
Voici une implémentation minimale du client:
package com.sample; import org.apache.cxf.interceptor.*; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; public class Client { public static void main(String args[]) throws Exception { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.setServiceClass(Math.class); // factory.setAddress("http://localhost:8080/Samplews"); // javax.xml.ws.WebServiceException: Could not send Message. Caused by: java.io.IOException: IOException invoking http://localhost:8080/Samplews: HTTP response '404: Introuvable' factory.setAddress("http://localhost:8080/MyCxfProject"); Math client = (Math) factory.create(); System.out.println("Server said: " + client.sum(2000, 11)); // Server said: 2011 // server log : 23:20:54,462 INFO [STDOUT] Summing 2000 + 11 } }
Notez l'utilisation de JaxWsProxyFactoryBean qui est une usine pour la création de proxy JAX-WS (procurations). Cette classe permet d'accéder aux propriétés internes utilisés pour mettre en place des procurations (proxies). Son utilisation permet de mieux contrôler que les APIs standard JAX-WS.
Article basé sur mastertheboss.com > Web > JBoss CXF Web services
Installer JBoss Tools sur Eclipse
Testons une version non finalisée du JBoss Tools : JBoss Tools 3.2 :: Eclipse 3.6.0 (toujours en développement)
La procédure d'installation de Jboss Tools avec les sites de mise à jour : JBoss Tools 3.2 Installation From Update Site
Help > Install New Software > Add > Name : JBoss Tools 3.2 Location : http://download.jboss.org/jbosstools/updates/development/ Cocher "All JBoss Tools 3.2.0" (ce qui est recommandé)
Finalement, cet adaptateur de serveurs (server adapter) fonctionne correctement avec Jboss 6 et rajoute quelques fonctionnalité de gestions de l'environnement d'exécutions de Jboss 6, tels que le login/pass d'administration du Jboss pour un démarrage et arrêt correct.
Ressouces
- JBoss Tools : Eclipse Plugins for JBoss and related Technology
- JBoss Tools Download (Update Sites ou Downloads)
- JBoss Tools Installation Methods et Types
- JBoss Tools Download (Update Sites ou Downloads)