[JAX-WS] Extension du plugin Maven jaxws:wsimport


Description

JAX-WS Maven Plugin permet (entre autre) de générer le code source nécessaire à la manipulation d'un webservice Soap en lui fournissant uniquement le WSDL de description.

Malgré cela, le code source nécessaire pour utiliser le webservice reste relativement compliqué à mettre en place, principalement à cause d'informations manquantes (nom du webservice, namespace et location du wsdl) qui peuvent être récupérées automatiquement.

Le code source que je propose ici est un plugin Maven qui va ajouter une classe utilitaire en se basant sur le code source généré par jaxws:wsimport.

Exemple d'utilisation d'un webservice après que la classe utilitaire soit générée :

import mywebservice.*;

public class Test {
    public static void main(String[] args) {
        MyWebServiceSoap soap = MyWebServiceTools.soapService();
        MyMethodResult result = soap.myMethod();
    }
}

Utilisation du plugin (Java 5 ou plus) :

Avant la première utilisation, installer le nouveau plugin Maven dans votre repository :
mvn install

Puis configurer le pom.xml du projet où doit être généré le code :

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>jaxws-maven-plugin</artifactId>
      <version>2.4.1</version>
      <configuration>
        <wsdlUrls>
          <!-- TODO: your WSDL here -->
          <wsdlUrl>http://mywebservice/MyWebService?wsdl</wsdlUrl>
        </wsdlUrls>
        <sourceDestDir>src/main/java</sourceDestDir>
      </configuration>
    </plugin>
    <plugin>
      <groupId>ccm.kx</groupId>
      <artifactId>jaxws2-maven-plugin</artifactId>
      <version>1.0</version>
      <configuration>
        <!-- sourceDestDir should be the same as for the jaxws configuration -->
        <sourceDestDir>src/main/java</sourceDestDir>
      </configuration>
    </plugin>
  </plugins>
</build>

Enfin, exécuter les deux plugins de génération pour votre projet :
mvn jaxws:wimport jaxws2:wsimport2

Remarque : sur le fonctionnement du plugin en lui même, il s'agit principalement de récupérer les informations passées en paramètre de l'annotation @WebServiceClient par le plugin standard.

Le code généré ressemble à ceci :

public final class MyWebServiceTools {

    private MyWebServiceTools() {
    }

    public static final String NAME = "MyWebService";

    public static final String TARGET_NAMESPACE = "http://mywebservice/";

    public static final String WSDL_LOCATION = "http://mywebservice/MyWebService?wsdl";

    public static URL getUrl() {
        try {
            return new URL(WSDL_LOCATION);
        } catch (Exception e) {
            throw new IllegalArgumentException("Invalid WSDL: " + WSDL_LOCATION, e);
        }
    }

    public static QName getQName() {
        return new QName(TARGET_NAMESPACE, NAME);
    }

    public static Service genericService() {
        return MyWebService.create(getUrl(), getQName());
    }

    public static MyWebServiceSoap soapService() {
        return genericService().getPort(MyWebServiceSoap.class);
    }
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.