Vous regardez une version antérieure (v. /wiki/display/DOC/Web+Services+AMUE) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 4) afficher la version suivante »

Nous proposons ici quelques codes utilisés pour interagir avec Apogée et Siham au travers de leurs WebServices.

Au vu des particularités d'usage technique de ces WebServices, il a semblé intéressant d'initier cette page.

Web Service Apogéé

Intoduction

Le Web Service SOAP Apogée de l'AMUE a longtemps été livré avec un client jar.

Ce client ne sera plus livré à partir de 2020.

Le WSDL présenté par le WebService SOAP doit normalement permettre d'utiliser le WebService directement et de manière efficace, sans usage d'une librairie cliente spécifique.

Il est cependant à noter que le client JAVA du WS Apogée livré jusque là par l'AMUE permettait en fait de faciliter le maniement des structures de données du Web Service exposé.

Une conception plus légère du web service n'aurait pas nécessité de client spécifique, et permettrait un maniement plus aisé des méthodes exposées.

Contexte

On partage donc ici un retourd'expérience de la migration d'un code utilisant le client jar web service Apogée (webservicesclient-500la.jar) vers un code Java toujours n'utilisant plus cette librairie mais utilisant un code généré directement depuis un WSDL.

On se place dans le contexte d'une application Java qui permet de modifier l'email d'un étudiant en utilisant le web service Apogée.

Code initial avec la librairie client Apogée (et donc code déprécié)

EtudiantMetierServiceInterface apogeeProxyEtu = new EtudiantMetierServiceInterfaceServiceLocator().getEtudiantMetier(url);
CoordonneesDTO2 coordonnes = apogeeProxyEtu.recupererAdressesEtudiant_v2(codeEtu, annee, "N");
CoordonneesMajDTO coordonnesMaj = new CoordonneesMajDTO(coordonnes);
coordonnesMaj.setEmail(newEmailPerso);
apogeeProxyEtu.mettreAJourAdressesEtudiant(coordonnesMaj, codeEtu);


Nouveau code

Partie du pom.xml pour générer le client depuis le WSDL : 

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>apogee-wsdl-etudiant-metier</id>
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>
                <wsdlUrls>
                    <wsdlUrl>https://ws.univ-ville.fr/apo-ws/services/EtudiantMetier?wsdl</wsdlUrl>
                </wsdlUrls>
                <packageName>fr.univville.wsclient.apogee.etudiant</packageName>
            </configuration>
        </execution>
    </executions>
    <configuration>
        <verbose>true</verbose>
        <sourceDestDir>${basedir}/src/main/java</sourceDestDir>
    </configuration>
</plugin>


Code JAVA :

public EtudiantMetierServiceInterface getEtudiantMetierService() throws Exception {
	if(etudiantMetierService==null) {
		URL etudiantMetierWsUrl = new URL(wsdlUrl);
		EtudiantMetierServiceInterfaceService etudiantMetierServiceInterfaceService = new EtudiantMetierServiceInterfaceService(etudiantMetierWsUrl);
		etudiantMetierService = etudiantMetierServiceInterfaceService.getEtudiantMetier();
	}
	return etudiantMetierService;
}


CoordonneesDTO2 coordonnes = getEtudiantMetierService().recupererAdressesEtudiantV2(codeEtu, annee, "N");
CoordonneesMajDTO coordonnesMaj = map2CoordonneesMajDTO(coordonnes);
coordonnesMaj.setEmail(newEmailPerso);
getEtudiantMetierService().mettreAJourAdressesEtudiant(coordonnesMaj, codeEtu);




private CoordonneesMajDTO map2CoordonneesMajDTO(CoordonneesDTO2 coordonnes) {
	CoordonneesMajDTO coordonnesMaj = new CoordonneesMajDTO();
	coordonnesMaj.setAnnee(coordonnes.getAnnee());
	coordonnesMaj.setEmail(coordonnes.getEmail());
	coordonnesMaj.setNumTelPortable(coordonnes.getNumTelPortable());	
	if(coordonnes.getTypeHebergement() != null) {
		coordonnesMaj.setTypeHebergement(coordonnes.getTypeHebergement().getCodTypeHebergement());
	}
	if(coordonnes.getAdresseAnnuelle()!=null) {
		AdresseMajDTO adresseAnnuelle = new AdresseMajDTO();
		if(coordonnes.getAdresseAnnuelle().getPays()!=null) {
			adresseAnnuelle.setCodPays(coordonnes.getAdresseAnnuelle().getPays().getCodPay());
		}
		if(coordonnes.getAdresseAnnuelle().getCommune()!=null) {
			CommuneMajDTO commune = new CommuneMajDTO();
			commune.setCodeInsee(coordonnes.getAdresseAnnuelle().getCommune().getCodeInsee());
			commune.setCodePostal(coordonnes.getAdresseAnnuelle().getCommune().getCodePostal());
			adresseAnnuelle.setCommune(commune);
		}
		adresseAnnuelle.setLibAd1(coordonnes.getAdresseAnnuelle().getLibAd1());
		adresseAnnuelle.setLibAd2(coordonnes.getAdresseAnnuelle().getLibAd2());
		adresseAnnuelle.setLibAd3(coordonnes.getAdresseAnnuelle().getLibAd3());
		adresseAnnuelle.setLibAde(coordonnes.getAdresseAnnuelle().getLibAde());
		adresseAnnuelle.setNumTel(coordonnes.getAdresseAnnuelle().getNumTel());
		coordonnesMaj.setAdresseAnnuelle(adresseAnnuelle);
	}
	if(coordonnes.getAdresseFixe() != null) {
		AdresseMajDTO adresseFixe = new AdresseMajDTO();
		if(coordonnes.getAdresseFixe().getPays()!=null) {
			adresseFixe.setCodPays(coordonnes.getAdresseFixe().getPays().getCodPay());
		}
		if(coordonnes.getAdresseFixe().getCommune()!=null) {
			CommuneMajDTO commune = new CommuneMajDTO();
			commune.setCodeInsee(coordonnes.getAdresseFixe().getCommune().getCodeInsee());
			commune.setCodePostal(coordonnes.getAdresseFixe().getCommune().getCodePostal());
			adresseFixe.setCommune(commune);
		}
		adresseFixe.setLibAd1(coordonnes.getAdresseFixe().getLibAd1());
		adresseFixe.setLibAd2(coordonnes.getAdresseFixe().getLibAd2());
		adresseFixe.setLibAd3(coordonnes.getAdresseFixe().getLibAd3());
		adresseFixe.setLibAde(coordonnes.getAdresseFixe().getLibAde());
		adresseFixe.setNumTel(coordonnes.getAdresseFixe().getNumTel());
		coordonnesMaj.setAdresseFixe(adresseFixe);
	}
	return coordonnesMaj;
}


Au vu de la méthode """private CoordonneesMajDTO map2CoordonneesMajDTO(CoordonneesDTO2 coordonnes)""" qu'il fallu créer on comprend ce qu'apportait le client web service et ce qu'il fait défaut maintenant ici.

Les structures de données n'étant pas les mêmes lorsqu'on récupère la donnée et lorsqu'on souhaite la mettre à jour, on est obligé ici de 'transvaser' la donnée d'une structure à l'autre (cet usage correspond sans doute à un anit-pattern ici, si quelqu'un le trouve, qu'il nous l'indique).

Le code obtenu ci-dessus est lourd à mettre en place et à maintenir, notamment en cas d'évolutions des web services SOAP Apogée, structures des données comprises.

Notez que naturellement l'oubli de la reprise d'un champ dans la méthode map2CoordonneesMajDTO entraine l'écrasement de ce champ dans Apogée puisque celà correspond à le 'setter' à null (le réinitialiser).

Web Service Siham.

A venir.



  • Aucune étiquette