Créer rapidement un webservice avec CXF

La communication via webservice est un procédé largement utilisé pour la communication inter-applicative.
CXF permet de rapidement mettre eb oeuvre un webservice ou de créer rapidement un client webservice.
Nous allons aborder la mise en oeuvre d'un webservice dans une application web gérée par SPRING dans la suite de cet article.
Un autre article décrira la génération automatique du code client d'un webservice.

Tout d'abord, dans le pom.xml, ajouter les lignes suivantes:

<dependency>
     <groupId>org.apache.cxf</groupId >
     <artifactId>cxf-rt-core</artifactId >
     <version>2.5.0</version >
</dependency>
<dependency>
     <groupId>org.apache.cxf</groupId >
     <artifactId>cxf-rt-frontend-jaxws</artifactId >
     <version>2.5.0</version >
</dependency>
<dependency>
     <groupId>org.apache.cxf</groupId >
     <artifactId>cxf-rt-transports-http</artifactId >
     <version>2.5.0</version >
</dependency>
<!-- Jetty is needed if you're using the CXFServlet -->
<dependency>
     <groupId>org.apache.cxf</groupId >
     <artifactId>cxf-rt-transports-http-jetty</artifactId >
     <version>2.5.0</version >
</dependency>

Ensuite, dans le web.xml, on ajoute la servlet CXF

<!-- Servlet CXF -->    
<servlet>
     <servlet-name>CXFServlet</servlet-name>
     <display-name>CXF Servlet</display-name>
     <servlet-class>
           org.apache.cxf.transport.servlet.CXFServlet
     </servlet-class>
     <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
     <servlet-name>CXFServlet</servlet-name>
     <url-pattern>/cxf/*</url-pattern>
</servlet-mapping>

Puis, il faut de créer une interface et son implémentation pour que le webservice soit en place

@WebService(name = "HelloWorld", targetNamespace = "blog.netapsys.fr")
public interface IHelloWorldWebservice
    extends Serializable {

    /**
     * Méthode HelloWorld
     * @param name
     * @return Helloworld + name
     */
    @WebMethod(operationName = "Hello")
    public String hello(@WebParam(name = "name") final String name);
}

 

@Controller
@WebService(endpointInterface = "fr.netapsys.blog.webservices.IHelloWorldWebservice", serviceName = "myService", portName = "mySOAP")
public class HelloWorldWebservice
    implements IHelloWorldWebservice {

    /** identifiant de sérialisation. */
    private static final long serialVersionUID = -4275578526540172071L;

    /**
     * {@inheritDoc}
     */
    public String hello(final String name) {
        return "HelloWorld " + name;
    }
}

Enfin, il faut configurer le webservice via Spring:

<context:component-scan base-package="fr.netapsys.blog.webservices"/>				

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<jaxws:endpoint id="myWebservice" 
	address="/helloworld" implementor="#helloWorldWebservice">
</jaxws:endpoint>

A partir de cela, vous avez un webservice opérationnel.

On peut le déployer sous Tomcat par exemple et l'interroger via le lein suivant: http://localhost:8080/testWsCxf/cxf/helloworld

Le WSDL est quant à lui disponible via l'URL: http://localhost:8080/testWsCxf/cxf/helloworld?wsdl

Le projet de test est disponible ici : Projet de test CXF.

J'aborderai la génération du code client à partir d'un WSDL dans un autre article.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.