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 :

Serveur web en PHP et client en Java - créer une classe client


Sujet :

Services Web Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut Serveur web en PHP et client en Java - créer une classe client
    Bonjour

    Je ne parviens pas à créer une classe en java afin d'utiliser un web service en php très basique :
    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
     
    <?php
    ini_set("soap.wsdl_cache_enabled", "0");
    $serveurSOAP = new SoapServer('HelloYou.wsdl');
    $serveurSOAP->addFunction('getHello');
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
    	$serveurSOAP->handle();
    }
    else
    {
    	echo 'désolé, je ne comprends pas les requêtes GET, veuillez seulement utiliser POST';
    }
     
    function getHello($prenom, $nom)
    {
    	return 'Hello ' . $prenom . ' ' . $nom ;
    }
    ?>
    comme vous voyez c'est basique et trouvé sur le net
    le type est RPC/encoded
    j'ai le fichier wsdl
    Je voudrais créer une classe pour l'utiliser sous eclipse (kelper) mais je n'y parviens pas
    WSimport ne prend pas en compte le rpc/encoded
    Je l'ai testé avec un script php client et cela marche bien

    Avez-vous des solutions ?

    Merci d'avance
    Carmelo

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu peux poster le wsdl?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Merci pour la réponse
    Je voudrais utiliser un web service en php et un wsdl qui y est lié, tous deux trouvés sur internet

    "HelloYou" que j'ai installé dans mon serveur de test dans l'intranet du boulot

    voici les scripts en php :

    1) web service en php "HelloYou.php"

    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
     
    <?php
    ini_set("soap.wsdl_cache_enabled", "0");
     
    $serveurSOAP = new SoapServer('HelloYou.wsdl');
     
    $serveurSOAP->addFunction('getHello');
     
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
     
    {
    	$serveurSOAP->handle();
    }
    else
    {
    	echo 'désolé, je ne comprends pas les requêtes GET, veuillez seulement utiliser POST';
    }
     
    function getHello($prenom, $nom)
    {
    	return 'Hello ' . $prenom . ' ' . $nom ;
    }
    ?>
    2) WSDL
    -----
    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
     
    <?xml version="1.0"?>
     
    <!-- partie 1 : Definitions -->
    <definitions 	name="HelloYou" 
    		targetNamespace="urn:HelloYou" 
    		xmlns:typens="urn:HelloYou" 
    		xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    		xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    		xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    		xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    		xmlns="http://schemas.xmlsoap.org/wsdl/">
     
    	<!-- partie 2 : Types-->
    <types>
        	<xsd:schema 	xmlns="http://www.w3.org/2001/XMLSchema" 
    			targetNamespace="urn:HelloYou">
     	</xsd:schema>
     </types> 
     
     
    	<!-- partie 3 : Message -->
    	<message name="getHelloRequest">
    		<part name="prenom" type="xsd:string"/>
    		<part name="nom" type="xsd:string"/>
    	</message>
    	<message name="getHelloResponse">
    		<part name="return" type="xsd:string"/>
    	</message>
     
    	<!-- partie 4 : Port Type -->
    	<portType name="HelloYouPort">
    		<!-- partie 5 : Operation -->
    		<operation name="getHello">
    			<input message="typens:getHelloRequest"/>
    			<output message="typens:getHelloResponse"/>
    		</operation>
    	</portType>
     
    	<!-- partie 6 : Binding -->
    	<binding name="HelloYouBinding" type="typens:HelloYouPort">
    		<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    		<operation name="getHello">
    			<soap:operation soapAction="HelloYouAction"/>
    			<input name="getHelloRequest">
    				<soap:body 	use="encoded" 	
    						namespace="urn:HelloYou" 	
    						encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    			</input>
    			<output name="getHelloResponse">
    				<soap:body 	use="encoded" 	
    						namespace="urn:HelloYou" 
    						encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    			</output>
    		</operation>
    	</binding>
     
    	<!-- partie 7 : Service -->
    	<service name="HelloYouService">
    		<documentation>Retourne une phrase simple </documentation>
    		<!-- partie 8 : Port -->
    		<port name="HelloYouPort" binding="typens:HelloYouBinding">
    			<soap:address location="http://adresse.serveur.intranet/webservices/webservice.php"/> <!-- modifier ce chemin vers server.php -->
    		</port>
    	</service>
    </definitions>
    Remarques :

    - Le type est RPC/encoded
    - j'ai éssayé de créer les classes avec WSimport.exe mais ça ne marche pas car il ne supporte pas le RPC/encoded
    - Peut-être qu'en transformant le wsdl vers du RPC/literal, wsimport pourrait créer les classes ?
    - je suis conscient que le web serveur est écrit en php et mon client en Java, mais cela ne devrait théoriquement pas créer de problème
    - Ca marche sans problème avec un client écrit en php

    Je galère depuis une semaine. Si vous pouviez m'aider, cela me ferait le plus grand bien

    Quoiqu'il en soit, merci d'avance pour votre aide

    Carmelopf

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je viens de tester ton WSDL sous eclipse avec new -> "Web Service Client", et il m'a généré correctement les stubs. Je vois bien aussi qu'il a pris en code le RPC encoded quand je regarde le stub généré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            oper.setStyle(org.apache.axis.constants.Style.RPC);
            oper.setUse(org.apache.axis.constants.Use.ENCODED);
    Quel genre d'erreur as-tu avec ton eclipse?

    edit: je vois que tu parle de eclipse Kepler: on est quand même deux version majeur plus loin pour le moment avec Mars. J'ai testé avec Mars.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Merci pour la réponse

    Voilà, j'ai de nouveau testé comme toi par nouveau -> "Web Service Client" ... mais là, il l'ouvre une fenêtre et il bloque avec le message "The service definition selected is invalid"

    Nom : ws_eclipse.png
Affichages : 1018
Taille : 61,2 Ko

    Ca peut-être un problème de serveur ? (Axis ?)

    Merci d'avance

    Bonne soirée
    Images attachées Images attachées  

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    si tu double clique sur ton fichier wsdl dans ton projet, tu arrive à l'ouvrir? Il n'y a pas d'erreur de validation? Tu n'as pas d'erreur dans ta console eclipse?
    Tu peux afficher la fenetre qui apparait quand tu clique sur browse? Normalement c'est là qu'apparaissent les erreurs de validation. Si tu as pensé dans tes préférences eclipse à bien activer la validation des wsdl.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Bonjour

    Merci pour la réponse.
    Je n'ai pas pu te reprendre la discussion plutôt

    Voilà, j'ai fait qlq tests :

    - voici qlq images d'éclipse
    - le fichier wsdl semble bon
    - quand le fichier wsdl est en local dans le projet, le programme crée bien les classes mais à partir de l'url pas

    - faut-il installer un serveur ? Axis ? Comment vérifier si le serveur tourne sous eclipse ?
    - ptêt un prob avec le proxy ... mais c'est un site en intranet ???

    voici, ci-dessous, les copies d'écran :

    merci d'avance
    Carmelopf

    Nom : ws_eclipse_preferences.png
Affichages : 1031
Taille : 58,7 Ko

    Nom : ws_eclipse2.png
Affichages : 1086
Taille : 22,0 Ko

    Nom : ws_eclipse_wsdl_test.JPG
Affichages : 964
Taille : 49,9 Ko
    Images attachées Images attachées  

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    "selection must be a wsdl" signifie que ton wsdl est structurellement inccorect (tag manquant, mal fermé, ...?). Tu peux toujours l'envoyer vers un service online de validation pour vérifier.

    Le fait que tu sache l'ouvrir avec l'éditeur n'est pas parlant, j'ai des WSDL où il manquait un tag de fermeture, l'éditeur eclipse m'afficahit ton graphe même si le ficheir était incorrect

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Merci
    Voici le code du WSDL :

    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
     
     
    <?xml version="1.0"?>
     
    <!-- partie 1 : Definitions -->
    <definitions 	name="HelloYou" 
    		targetNamespace="urn:HelloYou" 
    		xmlns:typens="urn:HelloYou" 
    		xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    		xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    		xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    		xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    		xmlns="http://schemas.xmlsoap.org/wsdl/">
     
    	<!-- partie 2 : Types-->
    <types>
        	<xsd:schema 	xmlns="http://www.w3.org/2001/XMLSchema" 
    			targetNamespace="urn:HelloYou">
     	</xsd:schema>
     </types> 
     
     
    	<!-- partie 3 : Message -->
    	<message name="getHelloRequest">
    		<part name="prenom" type="xsd:string"/>
    		<part name="nom" type="xsd:string"/>
    	</message>
    	<message name="getHelloResponse">
    		<part name="return" type="xsd:string"/>
    	</message>
     
    	<!-- partie 4 : Port Type -->
    	<portType name="HelloYouPort">
    		<!-- partie 5 : Operation -->
    		<operation name="getHello">
    			<input message="typens:getHelloRequest"/>
    			<output message="typens:getHelloResponse"/>
    		</operation>
    	</portType>
     
    	<!-- partie 6 : Binding -->
    	<binding name="HelloYouBinding" type="typens:HelloYouPort">
    		<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    		<operation name="getHello">
    			<soap:operation soapAction="HelloYouAction"/>
    			<input name="getHelloRequest">
    				<soap:body 	use="encoded" 	
    						namespace="urn:HelloYou" 	
    						encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    			</input>
    			<output name="getHelloResponse">
    				<soap:body 	use="encoded" 	
    						namespace="urn:HelloYou" 
    						encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    			</output>
    		</operation>
    	</binding>
     
    	<!-- partie 7 : Service -->
    	<service name="HelloYouService">
    		<documentation>Retourne une phrase simple </documentation>
    		<!-- partie 8 : Port -->
    		<port name="HelloYouPort" binding="typens:HelloYouBinding">
    			<soap:address location="http://nom.du.serveur.intranet/webservices/HelloYou.php"/> <!-- modifier ce chemin vers server.php -->
    		</port>
    	</service>
    </definitions>
    Merci d'avance et bon WE
    Carmelo

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    poste plutot le fichier en attachement, et vérifie que c'est bien ce que retourne à eclipse l'url que tu as mentionée.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Bonjour,

    Merci pour la réponse

    Je peux me tromper mais je ne pense pas que le problème vienne du document wsdl
    peux-être bien de la communication d'Eclipse avec proxy de l'intranet
    ou autre ... voici un message d'éclipse qui me donne l'impression qu'il y a un problème de serveur ... mais quel serveur ? celui installé dans Eclipse ou du serveur proxy de l'intranet ?

    voici copie l'image
    Nom : ws_eclipse_wsdl_test_NO_SERVER.JPG
Affichages : 1038
Taille : 48,6 Ko

    Merci d'avance

    Cpf

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    On parle là du serveur associé à ton projet, en gros pas de déploiement, rien de grave. Ensuite pas un problème de proxy dans le dernier cas puisque tu utilise un wsdl local et non plus une URL.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    J'ai donc été au-delà du message concernant le serveur et Eclipse a généré du code
    - HelloYouBindingStub.java : classe
    - HelloYouPort.java : interface
    - HelloYouPortProxy.java : classe
    - HelloYouService.java : interface
    - HelloYouServiceLocator.java : classe

    et j'ai créé une classe HelloYou.java dans laquelle j'ai mis mon main

    dans ma classe HelloYou.java, j'y ai mis le code :
    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
     
    package HelloYou;
    import org.apache.axis.AxisFault;
    import org.apache.axis.utils.JavaUtils;
    import javax.activation.DataHandler; 
    public class HelloYou {
    	public static void main(String[] args) throws AxisFault 
    	{
    		HelloYouBindingStub test = new HelloYouBindingStub();
    		try {
    			String reponse = new String();
    			reponse = test.getHello("carmelo", "pf");
    			System.out.println(reponse);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    l'execution donne des erreurs suivantes :

    21-mars-2016 16:35:32 org.apache.axis.utils.JavaUtils isAttachmentSupported
    ATTENTION: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
    AxisFault
    faultCode: {http://xml.apache.org/axis/}Server.NoEndpoint
    faultSubcode:
    faultString: No endpoint
    faultActor:
    faultNode:
    faultDetail:
    {http://xml.apache.org/axis/}exceptionName:org.apache.axis.NoEndPointException
    {http://xml.apache.org/axis/}stackTrace:No endpoint
    at HelloYou.HelloYouBindingStub.getHello(HelloYouBindingStub.java:94)
    at HelloYou.HelloYou.main(HelloYou.java:12)

    {http://xml.apache.org/axis/}hostname:NOM_DU_PC

    No endpoint
    at HelloYou.HelloYouBindingStub.getHello(HelloYouBindingStub.java:94)
    at HelloYou.HelloYou.main(HelloYou.java:12)

    Vous y voyez qlq chose ?

    Merci d'avance et bonne soirée

    Cpf

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Bonjour

    Les stubs générés dans Eclipse fonctionnent bien
    le problème venait du fait que le package n'était pas mentionné à l'intérieur de la classe java au niveau du nom du service web

    Résolu

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Serveur WEB Apache/php sous windows
    Par timousse dans le forum Apache
    Réponses: 1
    Dernier message: 18/12/2014, 23h14
  2. [Professionnalisation/Alternance] Développeur web/applications PHP/MySQL/AJAX/JQUERY/JAVA - Paris
    Par zilong dans le forum Demandes
    Réponses: 0
    Dernier message: 07/09/2011, 15h38
  3. création d'une base client en java
    Par elpheno dans le forum Général Java
    Réponses: 1
    Dernier message: 07/10/2009, 09h54
  4. consommer un Array d'un Serveur Web SOAP-PHP
    Par pitre dans le forum Services Web
    Réponses: 3
    Dernier message: 20/03/2009, 14h24

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