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.