1 package com.pentila.emawsconnector.utils;
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.net.MalformedURLException;
8 import java.util.ArrayList;
10 import java.util.List;
13 import org.springframework.http.converter.HttpMessageConverter;
14 import org.springframework.http.converter.xml.MarshallingHttpMessageConverter;
15 import org.springframework.oxm.xstream.XStreamMarshaller;
16 import org.springframework.web.client.RestTemplate;
18 import com.pentila.evalcomp.service.ws.WsErrors;
19 import com.thoughtworks.xstream.XStream;
20 import com.thoughtworks.xstream.io.xml.DomDriver;
26 * Cette classe est un connecteur vers EMaEval.
27 * Ce connecteur utilise des webservices de type REST.
30 public class EmaWSConnector {
32 private static String urlBase;
33 private static String encodage;
34 private static String login;
35 private static XStream xstream = new XStream(new DomDriver());
36 public static RestTemplate restTemplate = new RestTemplate();
37 static Long total = 0L;
39 public static String getUrlBase() {
43 public static String getLogin(){
49 * Constructeur de la classe.
50 * @param urlBase URL d'EMaEval. Par exemple http://evalcomp.com/webservices/
51 * @param encodage format d'encodage du retour. "xml" ou "json"
52 * @param login login de l'utilisateur authentifié
54 public EmaWSConnector(String urlBase, String encodage, String login){
55 EmaWSConnector.urlBase = urlBase;
56 EmaWSConnector.encodage = encodage;
57 EmaWSConnector.login = login;
62 private void initRestTemplate(){
63 XStreamMarshaller march = new XStreamMarshaller();
64 MarshallingHttpMessageConverter mm = new MarshallingHttpMessageConverter(march);
65 List<HttpMessageConverter<?>> ee = new ArrayList<HttpMessageConverter<?>>();
67 restTemplate.setMessageConverters(ee);
72 * permet l'appel à un webservice.
73 * @param uri uri du webservice. par exemple, "plan/getAll"
74 * @param clazz classe attendue en retour
75 * @return retourne le résultat de l'appel du webservice, désérialisé et casté en objet du type demandé.
77 public static <T> T read(String uri, Class<T> clazz) {
80 Object o = new Object();
81 Date start = new Date();
83 URL myUrl = new URL(urlBase + uri + "&contentType=" + encodage);
84 System.out.print("\n" + myUrl);
85 BufferedReader in = new BufferedReader(
86 new InputStreamReader(myUrl.openStream()));
89 while ((inputLine = in.readLine()) != null)
92 //System.out.println(xml);
93 }catch(MalformedURLException e){
94 System.out.println(e);
95 }catch(IOException e){
96 System.out.println(e);
98 o = xstream.fromXML(xml);
100 if(o.getClass() == clazz){
101 Date end = new Date();
102 total += end.getTime() - start.getTime();
103 System.out.print(" " + String.valueOf(end.getTime() - start.getTime()) + "ms("+ total + "ms)");
106 else if (o.getClass() == Integer.class){
107 System.out.println("\n"+WsErrors.getError((Integer) o));
111 System.out.println("erreur inconnue : ");
112 System.out.println(o.getClass() + " / " + clazz);
117 public static <T> T postForObject(String uri, Map<String, String> map, Class<T> class1) {
119 String myUrl = urlBase + uri + "?login="+login+"&contentType="+encodage;
120 System.out.print("\n" + myUrl);
122 Date start = new Date();
123 T result = restTemplate.postForObject(myUrl, map, class1);
124 Date end = new Date();
126 System.out.print(" " + String.valueOf(end.getTime() - start.getTime()) + "ms("+ total + "ms)");
127 total += end.getTime() - start.getTime();
131 public static void delete(String uri) {
133 String myUrl = urlBase + uri + "&login="+login+"&contentType="+encodage;
134 System.out.print("\n" + myUrl);
136 Date start = new Date();
137 restTemplate.delete(myUrl);
138 Date end = new Date();
140 System.out.print(" " + String.valueOf(end.getTime() - start.getTime()) + "ms("+ total + "ms)");
141 total += end.getTime() - start.getTime();