IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

WSDL parser Java


Sujet :

Services Web Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Doctorante
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut WSDL parser Java
    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

  2. #2
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    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">

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Doctorante
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Je dois parser les fichiers WSDL pour récupérer ces informations dans un tableau.
    Nass

  4. #4
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    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.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Doctorante
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    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

  6. #6
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    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.

  7. #7
    Nouveau membre du Club Avatar de Vincent Z.
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 29
    Points
    29
    Par défaut
    Bonjour.

    Citation Envoyé par rockley Voir le message
    En plus souvent les wsdl sont assez petit. Tu peux peut-être les charger directement dans un buffer pour aller plus vite.
    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...

  8. #8
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    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).
    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.

    Le WSDL n'est qu'un schéma de se qui transite et par où ça passe entre ton service et les clients.
    un WSDL, cela peut au contraire être très volumineux
    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).

    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.

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Doctorante
    Inscrit en
    Juillet 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Juillet 2011
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    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

  10. #10
    Nouveau membre du Club Avatar de Vincent Z.
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 29
    Points
    29
    Par défaut
    Bonjour.

    Citation Envoyé par nass5 Voir le message
    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.
    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.

    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>
    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
    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...

  11. #11
    Nouveau membre du Club Avatar de Vincent Z.
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 18
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par rockley Voir le message
    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.
    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.

    Citation Envoyé par rockley Voir le message
    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).
    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.

    Citation Envoyé par rockley Voir le message
    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.
    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...

Discussions similaires

  1. WSDL parser Java
    Par nass5 dans le forum Services Web
    Réponses: 0
    Dernier message: 03/08/2011, 16h41
  2. [WSDL] Parser un fichier WSDL
    Par thierry_ dans le forum Services Web
    Réponses: 5
    Dernier message: 19/07/2011, 11h04
  3. Parser java pour XMLRAD 2006
    Par ulys dans le forum XMLRAD
    Réponses: 1
    Dernier message: 25/10/2007, 09h34
  4. TNSnames parser java
    Par spam8you dans le forum Oracle
    Réponses: 1
    Dernier message: 11/06/2007, 11h10
  5. [débutant] Parser java
    Par hariri dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 10/05/2007, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo