ffluff Challenge Everything | 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
|