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.

JbossWsCxfMath.png

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