Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2324 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU]SOAP & WSDL (java6)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU]SOAP & WSDL (java6)

n°1774524
ffluff
Challenge Everything
Posté le 19-08-2008 à 16:55:52  profilanswer
 

Bonjour
 
j'essaye depuis presque 2jours de faire communiquer un client soap java avec un serveur soap php5
 
depuis ce matin j'arrive à faire un helloworld.
 
maintenant je bloque sur le passage de parametres ...
 
code de la fonction serveur sayHello


function sayHello($nom, $prenom){
 return array('reponse1' => 'Hello '.$nom, 'reponse2' => 'Hello '.$prenom);
}


 
(la fonction ne sert qu'a m'apprendre le SOAP/WSDL en java)
 
j'ai le wsdl :


<wsdl:types>
        <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="urn:HelloService">
            <xs:element name="sayHello">
              <xs:complexType>
               <xs:sequence>
                <xs:element name="nom" type="xs:string"/>
                <xs:element name="prenom" type="xs:string"/>
               </xs:sequence>
              </xs:complexType>
             </xs:element>
             
  <xs:element name="sayHelloResponse">
   <xs:complexType>
    <xs:sequence>
     <xs:element name="reponse1" type="xs:string"/>
     <xs:element name="reponse2" type="xs:string"/>
    </xs:sequence>
   </xs:complexType>
  </xs:element>
             
        </xs:schema>
    </wsdl:types>
 
 
    <wsdl:message name="sayHelloRequest">
        <wsdl:part name="name" element="ns:sayHello"/>
    </wsdl:message>
 
    <wsdl:message name="sayHelloResponse">
        <wsdl:part name="return" element="ns:sayHelloResponse"/>
    </wsdl:message>
     
 
    <wsdl:portType name="HelloServicePortType">
        <wsdl:operation name="sayHello">
            <wsdl:input message="ns:sayHelloRequest"/>
            <wsdl:output message="ns:sayHelloResponse"/>
        </wsdl:operation>
    </wsdl:portType>
 
    <wsdl:binding name="HelloServiceSoap11Binding" type="ns:HelloServicePortType">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <wsdl:operation name="sayHello">
            <soap:operation soapAction="sayHello" style="document"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
 
[...]


 
 
Le probleme c'est quand je fais wsimport -keep monwsdl et que je regarde HelloServicePortType.java j'ai  


public interface HelloServicePortType {
 
 
    /**
     *  
     * @param prenom
     * @param reponse1
     * @param reponse2
     * @param nom
     */
    @WebMethod(action = "sayHello" )
    @RequestWrapper(localName = "sayHello", targetNamespace = "urn:HelloService", className = "helloservice.SayHello" )
    @ResponseWrapper(localName = "sayHelloResponse", targetNamespace = "urn:HelloService", className = "helloservice.SayHelloResponse" )
    public void sayHello(
        @WebParam(name = "nom", targetNamespace = "urn:HelloService" )
        String nom,
        @WebParam(name = "prenom", targetNamespace = "urn:HelloService" )
        String prenom,
        @WebParam(name = "reponse1", targetNamespace = "urn:HelloService", mode = WebParam.Mode.OUT)
        Holder<String> reponse1,
        @WebParam(name = "reponse2", targetNamespace = "urn:HelloService", mode = WebParam.Mode.OUT)
        Holder<String> reponse2);
 
}


On voit que la fonction retourne void et que les resultats sont passés en parametres :/
 
alors que je m'attendais à


public interface HelloServicePortType {
 
 
    /**
     *  
     * @param prenom
     * @param reponse1
     * @param reponse2
     * @param nom
     */
    @WebMethod(action = "sayHello" )
    @RequestWrapper(localName = "sayHello", targetNamespace = "urn:HelloService", className = "helloservice.SayHello" )
    @ResponseWrapper(localName = "sayHelloResponse", targetNamespace = "urn:HelloService", className = "helloservice.SayHelloResponse" )
    public sayHelloResponse sayHello(
        @WebParam(name = "nom", targetNamespace = "urn:HelloService" )
        String nom,
        @WebParam(name = "prenom", targetNamespace = "urn:HelloService" )
        String prenom);
 
}


de cette facon je pouvais faire :  
SayHelloResponse res = server.sayHello("toto", "tutu" );
System.out.println(res.getReponse1() + "::" + res.getReponse2());
 
y a t'il un moyen d'obtenir ca ? Je me doute que oui mais je vois pas comment
Si quelqu'un pouvait m'éclairer ?


Message édité par ffluff le 25-08-2008 à 14:19:52
mood
Publicité
Posté le 19-08-2008 à 16:55:52  profilanswer
 

n°1774578
koude
Posté le 19-08-2008 à 20:28:32  profilanswer
 

Vu sur : http://www.newsletterarchive.org/2 [...] WS,+Part+3
 
Rather than keeping the return type as JAX-RPC does, JAX-WS
makes the method void and makes use of the holder for what was the
return value. By rule in JAX-WS, when there is more than one parameter
that can be considered an OUT parameter for an operation, the return
type must be void, and all OUT parameters are mapped to holder types.
 
En somme, reponse1 et reponse2 seraient une sorte de passage par référence.
Au final, ils devraient être initialisés avec le contenu de ton array php. Ce qui revient au même qu'une valeur de retour
 
D'après ce qui est écrit ci-dessus, si tu retourne juste une chaine de caractère dans la fonction php, tu devrais avoir une valeur de retour du coté java
Ou alors si tu veux garder le même principe tu peux créer l'équivalent d'une classe java en php qui contiendrait tes deux string (je connais pas le php donc je sais pas si c'est possible).
 
A tester

n°1777147
ffluff
Challenge Everything
Posté le 25-08-2008 à 14:18:56  profilanswer
 

J'ai trouvé la solution tout seul en fait mais merci de ton aide  je fais :
 

Code :
  1. [...]
  2. <wsdl:types>
  3.  <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="urn:HelloService">
  4.   <xs:element name="sayHello">
  5.    <xs:complexType>
  6.     <xs:sequence>
  7.      <xs:element name="nom" type="xs:string"/>
  8.      <xs:element name="prenom" type="xs:string"/>
  9.     </xs:sequence>
  10.    </xs:complexType>
  11.   </xs:element>
  12.            
  13.   <xs:complexType name="sayHelloResponse">
  14.    <xs:sequence>
  15.     <xs:element name="reponse1" type="xs:string"/>
  16.     <xs:element name="reponse2" type="xs:string"/>
  17.    </xs:sequence>
  18.   </xs:complexType>
  19.   <xs:element name="sayHelloRes">
  20.    <xs:complexType>
  21.     <xs:sequence>
  22.      <xs:element name="reponse" type="ns:sayHelloResponse"/>
  23.     </xs:sequence>
  24.    </xs:complexType>
  25.   </xs:element>
  26.  </xs:schema>
  27. </wsdl:types>
  28.     <wsdl:message name="sayHelloRequest">
  29.         <wsdl:part name="name" element="ns:sayHello"/>
  30.     </wsdl:message>
  31.     <wsdl:message name="sayHelloResponse">
  32.         <wsdl:part name="return" element="ns:sayHelloRes"/>
  33.     </wsdl:message>
  34.    
  35.     <wsdl:portType name="HelloServicePortType">
  36.         <wsdl:operation name="sayHello">
  37.             <wsdl:input message="ns:sayHelloRequest"/>
  38.             <wsdl:output message="ns:sayHelloResponse"/>
  39.         </wsdl:operation>
  40.     </wsdl:portType>
  41.     <wsdl:binding name="HelloServiceSoap11Binding" type="ns:HelloServicePortType">
  42.         <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  43.         <wsdl:operation name="sayHello">
  44.             <soap:operation soapAction="sayHello" style="document"/>
  45.             <wsdl:input>
  46.                 <soap:body use="literal"/>
  47.             </wsdl:input>
  48.             <wsdl:output>
  49.                 <soap:body use="literal"/>
  50.             </wsdl:output>
  51.         </wsdl:operation>
  52.     </wsdl:binding>
  53.     [...]


 
de cette facon la génération du wsdl me contruit automatiquement une class sayHelloResponse et je peux faire server.sayHello("nom", "prenom" ).getResponse1();


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU]SOAP & WSDL (java6)

 

Sujets relatifs
[RESOLU] [EXCEL] rechercher un caractere dans un texte[résolu] visual c++ 2008 équivalent de l'app.path [résolu]
[résolu] pb fonctions javascript[RESOLU] Assistant d'installation pour programme Java [newb inside]
[RESOLU] Compte à rebour mettre un lien PHP[RESOLU] script d'avertissement auto pour disque plein
[Résolu] Tuer le processus EXCEL.EXE depuis une application vba/access[Résolu] - Sessions bizarres, pertes des variables
[resolu]3 div dont 2 avec float : la troisième ne passe pas en dessousmsgbox et userform en plein ecran
Plus de sujets relatifs à : [RESOLU]SOAP & WSDL (java6)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR