Bonjour à tous!
Je développe actuellement une appli Web qui fournit des Web services. Je travaille avec WebObjects qui est un framework Apple basé sur Java. Ce sont des services complexes dans la mesure où je dois renvoyer de nombreuses informations en une fois au consommateur du service.
Typiquement le consommateur spécifie l'ID d'un objet dans une base de données, et le service lui renvoie l'ensemble des infos utiles sur cet objet.
J'ai donc une classe Webservices qui ressemble à ça :
En gros ce code va chercher dans la base de mon projet l'objet ayant l'ID spécifié par l'user, récupère les infos de celui ci, les place dans un bean et renvoie ce bean. Je n'ai pas trouvé d'autre moyen que de créer un bean pour renvoyer plusieurs valeurs (si y a plus simple je suis preneur )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 public class WebServices { public LogoDataBean WS_GetLogoData (String idLogo) { EOEditingContext context = new EOEditingContext(); try { Logo found = (Logo) EOUtilities.objectMatchingKeyAndValue(context,"Logo","logoID", new Integer(idLogo)); LogoDataBean monBean = new LogoDataBean(); if (found != null) { StringTokenizer st = new StringTokenizer(found.logoSize(),"x"); int i = 0; while (st.hasMoreTokens()) { i++; if (i == 1) { monBean.setLargeur(st.nextToken()); } else { monBean.setHauteur(st.nextToken()); } } monBean.setFullpath(found.logoFullPath()); monBean.setSociete(found.logoGroup()); monBean.setMarque(found.logoMark()); monBean.setCategorie(found.logoCategory()); monBean.setSouscategorie(found.logoSubCategory()); monBean.setCommentaires(found.logoDescription()); monBean.setResolution(found.logoSize()); return (monBean); } else { monBean.setCommentaires("Aucun logo ne correspond a votre demande"); return (monBean); } } catch (EOUtilities.MoreThanOneException ex) { LogoDataBean monBeanError = null; monBeanError.setCommentaires("Erreur lors de la recherche de votre Logo"); return monBeanError; } } }
Voici la classe LogoDataBean :
Le WSDL que je génère (enfin qui est généré automatiquement par WebObjects) donne ceci (je ne mets pas tout le fichier, mais juste ce qui me parait important. Si vous voulez en voir plus n'hésitez pas ) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 public class LogoDataBean implements Serializable { private String fullpath; private String largeur; private String hauteur; private String societe; private String marque; private String categorie; private String souscategorie; private String commentaires; private String resolution; public String fullpath(){ return fullpath; } public void setFullpath(String maString){ fullpath = maString; } public String largeur(){ return largeur; } public void setLargeur(String maString){ largeur = maString; } public String hauteur(){ return hauteur; } public void setHauteur(String maString){ hauteur = maString; } public String societe(){ return societe; } public void setSociete(String maString){ societe = maString; } public String marque(){ return marque; } public void setMarque(String maString){ marque = maString; } public String categorie(){ return categorie; } public void setCategorie(String maString){ categorie = maString; } public String souscategorie(){ return souscategorie; } public void setSouscategorie(String maString){ souscategorie = maString; } public String commentaires(){ return commentaires; } public void setCommentaires(String maString){ commentaires = maString; } public String resolution(){ return resolution; } public void setResolution(String maString){ resolution = maString; } }
Voilà, ça fait long, mais je préfère détailler au maximum.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <complexType name="LogoDataBean"> <sequence> <element name="categorie" nillable="true" type="xsd:string"/> <element name="commentaires" nillable="true" type="xsd:string"/> <element name="fullpath" nillable="true" type="xsd:string"/> <element name="hauteur" nillable="true" type="xsd:string"/> <element name="largeur" nillable="true" type="xsd:string"/> <element name="marque" nillable="true" type="xsd:string"/> <element name="resolution" nillable="true" type="xsd:string"/> <element name="societe" nillable="true" type="xsd:string"/> <element name="souscategorie" nillable="true" type="xsd:string"/> </sequence> </complexType> <element name="LogoDataBean" nillable="true" type="tns1:LogoDataBean"/> <wsdl:message name="WS_GetLogoDataRequest"> <wsdl:part name="idLogo" type="xsd:string"/> <wsdl:part name="machineType" type="xsd:string"/> <wsdl:part name="client" type="xsd:string"/> </wsdl:message> <wsdl:message name="WS_GetLogoDataResponse"> <wsdl:part name="WS_GetLogoDataReturn" type="tns1:LogoDataBean"/> </wsdl:message>
Mes questions sont :
- J'ai essayé d'utiliser ce web service (avec une appli WebObjects, donc en java) mais je n'y suis pas parvenu. On m'a parlé du package d'Apache Axis, contenant la classe WSDL2Java qui permet de générer la classe java correspondante au fichier WSDL (en éliminant les problèmes de serialization).
Le truc c'est que je bosse sur un Macintosh, que modifier le CLASSPATH pour pouvoir utiliser WSDL2Java ça va me prendre du temps (je sais pas trop comment faire), et qu'à priori mes Web Services seront consommés par des applis écrites en C++.
Donc au regard du fichier WSDL, pensez vous que mon WebService soit utilisable? Avec WSDL2Java ça passerait, non? Si oui, on peut en déduire qu'un programme C++ aussi, non?
Voilà, en gros je voudrais savoir si le Web Service que je vous présente vous semble utilisable en l'état. Merci d'avance à tous, et bonne journée.
Partager