...
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.
...
Java : code initial avec la librairie client Apogée (et donc code déprécié)
| Bloc de code | ||
|---|---|---|
| ||
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); |
...
Java : nouveau code
Generation de code depuis le wsdl
Partie du pom.xml pour générer le client depuis le WSDL :
| Bloc de code | ||
|---|---|---|
| ||
<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
| Bloc de code | ||
|---|---|---|
| ||
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;
}
|
Remarques
Au vu de la méthode """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.
...
Exemple en Java : récupération des dossiers agents
Generation de code depuis le wsdl
Partie du pom.xml pour générer le client depuis le WSDL :
...
| Bloc de code | ||
|---|---|---|
| ||
https://siham:hello@siham.univ-ville.fr/ListeAgentsWebService/ListeAgentsWebService?wsdl https://siham:hello@siham.univ-ville.fr/DossierAgentDateWebService/DossierAgentDateWebService?wsdl https://siham:hello@siham.univ-ville.fr/DossierParametrageWebService/DossierParametrageWebService?wsdl |
Code Java
...
| Bloc de code | ||
|---|---|---|
| ||
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.MessageContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.web.multipart.MultipartException;
import fr.univville.siham.dossieragent.DossierAgentDateWebService;
import fr.univville.siham.dossieragent.Individu;
import fr.univville.siham.dossieragent.Matricule;
import fr.univville.siham.dossieragent.ParamAgentDateWS;
import fr.univville.siham.dossieragent.ReferentielService;
import fr.univville.siham.dossieragent.WebserviceException_Exception;
import fr.univville.siham.listeagents.IListeAgentsWebService;
import fr.univville.siham.listeagents.ListeAgentsWS;
import fr.univville.siham.listeagents.ParamListeAgents;
import fr.univville.siham.listeagents.ResultatsListeAgents;
import fr.univville.siham.listeagents.WebServiceException_Exception;
import fr.univville.siham.parametrage.DossierParametrageWebService;
import fr.univville.siham.parametrage.ListeNomenclatures;
import fr.univville.siham.parametrage.ListeUO;
import fr.univville.siham.parametrage.NomenclatureService;
import fr.univville.siham.parametrage.ParamNomenclature;
import fr.univville.siham.parametrage.ParamStructure;
import fr.univville.siham.parametrage.Repertoire;
import fr.univville.siham.parametrage.Structures;
public class SihamService implements InitializingBean {
private static final int NB_AGENTS_PER_REQUEST = 20;
protected final Logger log = LoggerFactory.getLogger(this.getClass());
private IListeAgentsWebService listeAgentsWebService;
private DossierAgentDateWebService dossierAgentDateWebService;
private DossierParametrageWebService parametrageWebService;
private String url;
private String username;
private String password;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public void setUsername(String username) {
this.username = username;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public void afterPropertiesSet() throws Exception {
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
username,
password.toCharArray());
}
});
Map<String, List<String>> headers = new HashMap<String, List<String>>();
headers.put("Username", Collections.singletonList(username));
headers.put("Password", Collections.singletonList(password));
URL listeAgentsWsUrl = new URL(url + "/ListeAgentsWebService/ListeAgentsWebService?wsdl");
ListeAgentsWS listeAgentsWS = new ListeAgentsWS(listeAgentsWsUrl);
listeAgentsWebService = listeAgentsWS.getListeAgentsWebServiceImplPort();
Map<String, Object> req_ctx = ((BindingProvider)listeAgentsWebService).getRequestContext();
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
log.info("Siham listeAgentsWebService OK");
URL dossierAgentWsUrl = new URL(url + "/DossierAgentDateWebService/DossierAgentDateWebService?wsdl");
ReferentielService referentielService = new ReferentielService(dossierAgentWsUrl);
dossierAgentDateWebService = referentielService.getDossierAgentDateWebServiceImpPort();
Map<String, Object> req_ctx_ref = ((BindingProvider)dossierAgentDateWebService).getRequestContext();
req_ctx_ref.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
log.info("Siham dossierAgentDateWebService OK");
URL parametrageWsUrl = new URL(url + "/DossierParametrageWebService/DossierParametrageWebService?wsdl");
NomenclatureService nomenclatureService = new NomenclatureService(parametrageWsUrl);
parametrageWebService = nomenclatureService.getDossierParametrageWebServiceImpPort();
Map<String, Object> req_ctx_par = ((BindingProvider)parametrageWebService).getRequestContext();
req_ctx_par.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
log.info("Siham parametrageWebService OK");
Authenticator.setDefault(null);
}
protected synchronized List<String> getAgentsMatricules(String nomUsuel) {
List<String> matricules = new ArrayList<String>();
ParamListeAgents paramRecupListeAgents = new ParamListeAgents();
paramRecupListeAgents.setNomUsuel(nomUsuel);
try {
List<ResultatsListeAgents> agents= listeAgentsWebService.recupListeAgents(paramRecupListeAgents);
for(ResultatsListeAgents agent : agents) {
matricules.add(agent.getMatricule());
}
log.debug(agents.size() + " matricules d'agents récupérés depuis Siham");
} catch (WebServiceException_Exception e) {
throw new MultipartException("Erreur lors de la récupération agents depuis web-service siham", e);
}
return matricules;
}
public Individu getSihamIndividu(String matricule) {
Map<String, Individu> sihamIndividus = getSihamIndividus(Arrays.asList(new String[] {matricule}));
return sihamIndividus.get(matricule);
}
public synchronized Map<String, Individu> getSihamIndividus(List<String> matricules) {
Map<String, Individu> sihamIndividus = new HashMap<String, Individu>();
ParamAgentDateWS paramAgentDateWS = new ParamAgentDateWS();
int i = 0;
int n = 0;
List<String> matriculesErreurs = new ArrayList<String>();
for(String matricule: matricules) {
i++;
n++;
Matricule matriculeObj = new Matricule();
matriculeObj.setMatricule(matricule);
paramAgentDateWS.getListeMatricules().add(matriculeObj);
if(i==NB_AGENTS_PER_REQUEST || n==matricules.size()) {
try {
List<Individu> agents = dossierAgentDateWebService.recupDonneesAgents(paramAgentDateWS);
for(Individu agent: agents) {
sihamIndividus.put(agent.getDonneesPersonnelles().getMatricule(), agent);
}
} catch (WebserviceException_Exception e) {
log.info("Erreur lors de la récupération agents depuis web-service siham", e);
for(Matricule agentMatricule : paramAgentDateWS.getListeMatricules()) {
ParamAgentDateWS agentParamAgentDateWS = new ParamAgentDateWS();
agentParamAgentDateWS.getListeMatricules().add(agentMatricule);
try {
List<Individu> agents = dossierAgentDateWebService.recupDonneesAgents(agentParamAgentDateWS);
for(Individu agent: agents) {
sihamIndividus.put(agent.getDonneesPersonnelles().getMatricule(), agent);
}
} catch (WebserviceException_Exception ee) {
log.warn("Erreur lors de la récupération de cet agent depuis web-service siham : " + agentMatricule.getMatricule(), ee);
sihamIndividus.put(agentMatricule.getMatricule(), new SihamIndividuAgentInError());
matriculesErreurs.add(agentMatricule.getMatricule());
}
}
}
paramAgentDateWS = new ParamAgentDateWS();
i = 0;
}
}
if(matriculesErreurs.size() > 0) {
log.error("Matricules en erreur lors de la récupération de ces agents depuis web-service siham : " + matriculesErreurs);
}
log.info(sihamIndividus.size() + " agents récupérés depuis Siham dont " + matriculesErreurs.size() + " en erreur.");
return sihamIndividus;
}
public Map<String, Individu> getSihamIndividuFromNomUsuel(String nomUsuel) {
List<String> matricules = getAgentsMatricules(nomUsuel);
Map<String, Individu> sihamIndividus = getSihamIndividus(matricules);
return sihamIndividus;
}
public synchronized List<Structures> getSihamStructures() {
List<Structures> structures;
try {
ParamStructure paramStructure = new ParamStructure();
paramStructure.setCodeAdministration("");
paramStructure.setDateObservation("");
paramStructure.getListeUO().add(new ListeUO());
structures = parametrageWebService.recupStructures(paramStructure);
} catch (fr.univville.siham.parametrage.WebserviceException_Exception e) {
throw new RuntimeException("Erreur lors de la récupération des structures depuis web-service siham", e);
}
log.info(structures.size() + " structures récupérées depuis Siham");
return structures;
}
public synchronized List<Repertoire> getSihamNomenclaturesRepertoires() {
List<Repertoire> repertoires;
try {
ParamNomenclature paramNomenclature = new ParamNomenclature();
paramNomenclature.setCodeAdministration("");
paramNomenclature.setDateObservation("");
paramNomenclature.getListeNomenclatures().add(new ListeNomenclatures());
repertoires = parametrageWebService.recupNomenclaturesRH(paramNomenclature);
} catch (fr.univville.siham.parametrage.WebserviceException_Exception e) {
throw new RuntimeException("Erreur lors de la récupération des répertoires de nomenclatures depuis web-service siham", e);
}
log.info(repertoires.size() + " répertoires de nomenclatures récupérées depuis Siham");
return repertoires;
}
}
|
...
| Bloc de code | ||
|---|---|---|
| ||
import fr.univrouen.multipass.domain.siham.dossieragent.Individu;
public class SihamIndividuAgentInError extends Individu {
} |
Descripteur Spring
En spring, on pourra initialiser le service ainsi :
...