Bonjour,
je souhaiterais récupérer les informations contenues dans un fichier WSDL tel que: le nom du service Web, les opérations, les messages, les données simples et complexes.
J'attends vos propositions.
Merci par avance.
Nass
Bonjour,
je souhaiterais récupérer les informations contenues dans un fichier WSDL tel que: le nom du service Web, les opérations, les messages, les données simples et complexes.
J'attends vos propositions.
Merci par avance.
Nass
Salut
(Je sais pas si j'ai bien compris ce que tu demande.)
Les info que tu cherches sont contenu dans ton WSDL tout simplement.
Tu l'ouvre dans notepad++ et t'a plus qu'a chercher les info.
Exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part <complexType name="Employeur">
Je dois parser les fichiers WSDL pour récupérer ces informations dans un tableau.
Nass
Je sais pas si tu peu le faire directement.
Peut-être que tu peux écrire une classe qui lit le wsdl et envoi les info dans le tableau.
Je ne cherche pas à le faire directement, par contre j'aimerais avoir de l'aide car je ne m'en sort pas avec WSDL4J, Woden et Axis2..je ne sais pas quoi choisir, ni comment démarrer.
Merci
Moi si j'avais à le faire :
Je crée une classe "LireWSDL" qui prend en entrée ton fichier XML.
Et derrière je crée des méthodes pour traiter les Strings (Substring, StringTokenizer et compagnie).
Si t'a bien compris comment marche les WSDL et où récupérer exactement les informations que tu cherches, ça peut aller très vite.
En plus souvent les wsdl sont assez petit. Tu peux peut-être les charger directement dans un buffer pour aller plus vite.
Mais bon, y'a surement d'autre façon de faire.
Bonjour.
Heu... Non, un WSDL, cela peut au contraire être très volumineux et être réparti sur plusieurs fichiers (il peut y avoir des imports d'autres WSDL ou de schémas XML).
Le mieux est donc de s'appuyer sur une librairie existante.
Pour la version 1.1 de la spécification WSDL, il y a WSDL4j, qui est bien connu. Mais il est très laborieux de récupérer les informations des schémas (les types des paramètres, etc.).
Sinon, il y a une autre librairie pour les WSDL 1.1, qui s'appelle EasyWSDL et qui est utilisée dans divers projets liés à la SOA. Le site officiel manque de mise à jour. Mais la librairie continue d'évoluer et une version plus récente de la doc' est disponible ici.
Mécanicien en chef sur Roboconf.
Et il y a encore du boulot...
Je suis d'accord pour les import (WSDL et XML), mais dans tout les cas nass5 a la totalité des fichiers. Et si tu regardes bien les dépendances et les import tu pourras constater qu'on peut reconstituer un seul et unique WSDL.Heu... Non, un WSDL, cela peut au contraire être très volumineux et être réparti sur plusieurs fichiers (il peut y avoir des imports d'autres WSDL ou de schémas XML).
Le WSDL n'est qu'un schéma de se qui transite et par où ça passe entre ton service et les clients.
Je sais pas où t'a vu ça mais je veux bien un exemple de WSDL qui dépasse 4000 ou 5000 mille lignes (pour le buffer).un WSDL, cela peut au contraire être très volumineux
Que tu me dises que les objets qui transitent en XML peuvent être volumineuse OK mais qu'un WSDL le soit c'est beaucoup moins vrai.
Sur mon poste, mon WSDL fait exactement 307 lignes et il y a 4 projets avec 23 000 fichiers en tout. Le ws n'utilise que ce dont j'ai besoin.
Merci pour vos réponses.
J'aimerai si possible que quelqu'un m'indique des exemples sur la façon d'obtenir les informations (opérations, paramètres et types ..etc) d'un fichier WSDL à l'aide de EasyWSDL.
Merci
Bonjour.
J'ai vous ai fait un petit exemple.
Je me suis appuyé sur la version 3.0, qui si elle est encore en version snapshot, est la plus optimisée et dont l'API a été revue depuis la version 2. Je ne sais pas quel est le scope de votre utilisation (prototype, production...), mais dans un premier temps, cela vous donnera une idée de ses possibilités.
Première chose donc, j'ai créé un projet Maven qui dépend d'EasyWSDL.
Voilà le POM.
Et voilà une classe de test, qui est en fait un assemblage des exemples donnés sur le wiki mentionné plus haut.
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 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>com.ebmwebsourcing.essai</groupId> <artifactId>easywsdl</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>jar</packaging> <dependencies> <dependency> <artifactId>easywsdl11-api</artifactId> <groupId>com.ebmwebsourcing.easywsdl</groupId> <version>3.0-alpha-1</version> </dependency> <dependency> <artifactId>easywsdl11-impl</artifactId> <groupId>com.ebmwebsourcing.easywsdl</groupId> <version>3.0-alpha-1</version> </dependency> </dependencies> <repositories> <repository> <id>ebm</id> <url>http://maven.petalslink.com/public/</url> </repository> </repositories> </project>
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 package com; import java.io.File; import java.net.MalformedURLException; import com.ebmwebsourcing.easybox.api.XmlContext; import com.ebmwebsourcing.easybox.api.XmlContextFactory; import com.ebmwebsourcing.easybox.api.XmlObjectReadException; import com.ebmwebsourcing.easybox.api.XmlObjectReader; import com.ebmwebsourcing.easyschema10.api.element.Element; import com.ebmwebsourcing.easywsdl11.api.element.Definitions; import com.ebmwebsourcing.easywsdl11.api.element.Input; import com.ebmwebsourcing.easywsdl11.api.element.Message; import com.ebmwebsourcing.easywsdl11.api.element.Operation; import com.ebmwebsourcing.easywsdl11.api.element.Part; import com.ebmwebsourcing.easywsdl11.api.element.PortType; import com.ebmwebsourcing.easywsdl11.api.type.TParam; public class Test { /** * @param args */ public static void main( String[] args ) { // Create a factory: can be static XmlContextFactory xmlContextFactory = new XmlContextFactory(); // Create a context: can be static XmlContext xmlContext = xmlContextFactory.newContext(); // Create a generic reader: cannot be static (not thread safe) XmlObjectReader reader = xmlContext.createReader(); // Read WSDL 1.1 definitions from the URL File f = new File( "D:/BackupBureau/WSDLs/tuxDroid.wsdl" ); try { Definitions def = reader.readDocument( f.toURI().toURL(), Definitions.class ); for( PortType portType : def.getPortTypes()) { System.out.println("++++++++++++++++++++++"); System.out.println("PortType: " + portType.getName()); for( Operation op : portType.getOperations()) { System.out.println("--------------------------"); System.out.println("Operation: " + op.getName()); extractIO( op.getInput()); extractIO( op.getOutput()); System.out.println("--------------------------"); } System.out.println("++++++++++++++++++++++"); } } catch( MalformedURLException e ) { e.printStackTrace(); } catch( XmlObjectReadException e ) { e.printStackTrace(); } } /** * @param param */ private static void extractIO( TParam param ) { String prefix = param instanceof Input ? "\tInput: " : "\tOutput: "; System.out.println(prefix + param.getName()); Message message = param.findMessage(); if (message != null) { for (Part part : message.getParts()) { Element element = part.findElement(); if (element != null) { System.out.println("\t\tElement: " + element.getName()); } } } } }
Mécanicien en chef sur Roboconf.
Et il y a encore du boulot...
Oui, c'est le principe des imports en général. On pourrait tout mettre dans un seul fichier, mais c'est plus simple à maintenir et à réutiliser si on le découpe.
La taille du WSDL dépend du nombre d'opérations et de la complexité des paramètres des opérations.
Pour un gros exemple (qui n'est pas de moi), voir ici. Sinon, j'ai déjà vu chez des clients des WSDL complexes, pas forcément volumineux par le nombre de lignes (qui n'est d'ailleurs pas important), mais par le nombre de fichiers nécessaires. Notamment, il y en avait un qui importait près de 15 fichiers, avec des sous-dossiers et une structure arborescente qui faisait peur. Ils avaient mutualisé à l'extrême les structures de données entre plusieurs services.
A la limite, je n'en avais rien à faire. Mon travail n'était pas de faire de jolis WSDL mais de m'appuyer sur ceux qui existaient.
Je peux aussi écrire un WSDL HelloWorld qui fera dans les 10 lignes. Cela ne permet pas d'en tirer une généralité.
Plus globalement, WSDL, ce n'est pas que pour les Web services. On s'en sert aussi dans BPEL et dans les annuaires ou gestionnaires de services. Et selon ce qu'on fait, parfois, ils ne sont même pas générés, il faut les écrire ou les modifier à la main.
Au final, oui, un WSDL, ça peut être simple, mais ça ne l'est pas toujours (je n'ai pas non plus évoqué les extensions de la spécification - il y en a par exemple pour BPEL, qui est lui aussi un standard). Et réécrire un parseur de WSDL, surtout si on le base sur des string tokenizer, c'est limite en Java. Il y a des librairies existantes pour ça et je ne vois pas de raison de s'en priver.
Mécanicien en chef sur Roboconf.
Et il y a encore du boulot...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager