Probleme de wsdl2h service web

Résolu/Fermé
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 - 25 janv. 2011 à 12:40
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 - 29 janv. 2011 à 13:13
Bonjour,

je debute sur les services web ,je tente a creer un client a partir du fichier .wsdl
avec la commande wsdl2h -c -g -o service.h messg.wsdl

on sorti j'ai un fichier service.h

le probleme que ce fichier n'est pas identique a service.h qui existe au serveur

comment avoir un fichier identique a partir du fichier.wsdl ?




merci

A voir également:

8 réponses

mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
25 janv. 2011 à 15:10
Peux-tu nous donner les deux fichiers .h et le fichier wsdl afin qu'on voit qu'elles sont ces différences ?

En outre, si dans le .h qui n'est pas issu de wsdl2h, il y a des fonctions qui n'ont rien à voir avec le web service ce n'est pas forcément très surprenant que tu observes des différences !
0
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
25 janv. 2011 à 17:11
merci de me repondre

voici le fichier messg.wsdl

<definitions name="messg" targetNamespace="http://192.168.1.1:8060/messg.wsdl">
?
<types>
?
<schema targetNamespace="urn:messg" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
?
<complexType name="Array40000Ofdouble">
?
<complexContent>
?
<restriction base="SOAP-ENC:Array">
<attribute ref="SOAP-ENC:arrayType" WSDL:arrayType="xsd:double[]"/>
</restriction>
</complexContent>
</complexType>
</schema>
</types>
?
<message name="test1Request">
<part name="a" type="ns:Array40000Ofdouble"/>
<part name="b" type="ns:Array40000Ofdouble"/>
<part name="lon" type="xsd:int"/>
</message>
?
<message name="test1Response">
<part name="r" type="xsd:double"/>
</message>
?
<portType name="messgPortType">
?
<operation name="test1">
<documentation>Service definition of function ns__test1</documentation>
<input message="tns:test1Request"/>
<output message="tns:test1Response"/>
</operation>
</portType>
?
<binding name="messg" type="tns:messgPortType">
<SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http/"/>
?
<operation name="test1">
<SOAP:operation style="rpc" soapAction=""/>
?
<input>
<SOAP:body use="encoded" namespace="urn:messg" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
?
<output>
<SOAP:body use="encoded" namespace="urn:messg" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
?
<service name="messg">
<documentation>gSOAP 2.7.9l generated service definition</documentation>
?
<port name="messg" binding="tns:messg">
<SOAP:address location="http://192.168.1.1:8060"/>
</port>
</service>
</definitions>


voici service.h du serveur

//gsoap ns service name: messg
//gsoap ns service style: rpc
//gsoap ns service encoding: literal
//gsoap ns service location: http://192.168.1.1:8060
//gsoap ns schema namespace: urn:messg
int ns__test1(double a[40000], double b[40000],int lon, double * r );



voici le fichier service.h generé par le fichier .wsdl par la commande
wsdl2h -n -o service.h messg.wsdl


/* service.h
Generated by wsdl2h 1.2.9l from messg.wsdl and typemap.dat
2011-01-25 15:59:51 GMT
Copyright (C) 2001-2007 Robert van Engelen, Genivia Inc. All Rights Reserved.
This part of the software is released under one of the following licenses:
GPL or Genivia's license for commercial use.
*/

/* NOTE:

- Compile this file with soapcpp2 to complete the code generation process.
- Use soapcpp2 option -I to specify paths for #import
To build with STL, 'stlvector.h' is imported from 'import' dir in package.
- Use wsdl2h options -c and -s to generate pure C code or C++ code without STL.
- Use 'typemap.dat' to control schema namespace bindings and type mappings.
It is strongly recommended to customize the names of the namespace prefixes
generated by wsdl2h. To do so, modify the prefix bindings in the Namespaces
section below and add the modified lines to 'typemap.dat' to rerun wsdl2h.
- Use Doxygen (www.doxygen.org) to browse this file.
- Use wsdl2h option -l to view the software license terms.

DO NOT include this file directly into your project.
Include only the soapcpp2-generated headers and source code files.
*/

//gsoapopt w

/******************************************************************************\
* *
* http://192.168.1.1:8060/messg.wsdl *
* *
\******************************************************************************/


/******************************************************************************\
* *
* Import *
* *
\******************************************************************************/


// STL vector containers (use option -s to disable)
#import "stlvector.h"

/******************************************************************************\
* *
* Schema Namespaces *
* *
\******************************************************************************/


/* NOTE:

It is strongly recommended to customize the names of the namespace prefixes
generated by wsdl2h. To do so, modify the prefix bindings below and add the
modified lines to typemap.dat to rerun wsdl2h:

ns1 = "http://192.168.1.1:8060/messg.wsdl"
ns2 = "urn:messg"

*/

//gsoap ns2 schema namespace: urn:messg
//gsoap ns2 schema form: unqualified

/******************************************************************************\
* *
* Schema Types *
* *
\******************************************************************************/



// Forward declaration of class Array40000Ofdouble.
class Array40000Ofdouble;

/// "urn:messg":Array40000Ofdouble is a complexType with complexContent restriction of SOAP-ENC:Array.
/// SOAP encoded array of xs:double
class Array40000Ofdouble
{ public:
/// Pointer to array of double.
double *__ptr ;
/// Size of the dynamic array.
int __size ;
/// Offset for partially transmitted arrays (uncomment only when required).
// int __offset ;
/// A handle to the soap struct that manages this instance (automatically set)
struct soap *soap ;
};

/******************************************************************************\
* *
* Services *
* *
\******************************************************************************/


//gsoap ns2 service name: messg
//gsoap ns2 service type: messgPortType
//gsoap ns2 service port: http://192.168.1.1:8060
//gsoap ns2 service namespace: urn:messg
//gsoap ns2 service transport: http://schemas.xmlsoap.org/soap/http/

/** @mainpage messg Definitions

@section messg_bindings Bindings
- @ref messg

*/

/**

@page messg Binding "messg"

@section messg_service Service Documentation "messg"
gSOAP 2.7.9l generated service definition

@section messg_operations Operations of Binding "messg"
- @ref ns2__test1

@section messg_ports Endpoints of Binding "messg"
- http://192.168.1.1:8060

Note: use wsdl2h option -N to change the service binding prefix name

*/

/******************************************************************************\
* *
* messg *
* *
\******************************************************************************/


/******************************************************************************\
* *
* ns2__test1 *
* *
\******************************************************************************/


/// Operation "ns2__test1" of service binding "messg"

/**

Operation details:

Service definition of function ns__test1
- SOAP RPC encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

C stub function (defined in soapClient.c[pp] generated by soapcpp2):
@code
int soap_call_ns2__test1(
struct soap *soap,
NULL, // char *endpoint = NULL selects default endpoint for this operation
NULL, // char *action = NULL selects default action for this operation
// request parameters:
Array40000Ofdouble* a,
Array40000Ofdouble* b,
int lon,
// response parameters:
double &r
);
@endcode

C server function (called from the service dispatcher defined in soapServer.c[pp]):
@code
int ns2__test1(
struct soap *soap,
// request parameters:
Array40000Ofdouble* a,
Array40000Ofdouble* b,
int lon,
// response parameters:
double &r
);
@endcode

C++ proxy class (defined in soapmessgProxy.h):
class messg;

Note: use soapcpp2 option '-i' to generate improved proxy and service classes;

*/

//gsoap ns2 service method-style: test1 rpc
//gsoap ns2 service method-encoding: test1 http://schemas.xmlsoap.org/soap/encoding/
//gsoap ns2 service method-action: test1 ""
int ns2__test1(
Array40000Ofdouble* a, ///< Request parameter
Array40000Ofdouble* b, ///< Request parameter
int lon, ///< Request parameter
double &r ///< Response parameter
);

/* End of service.h */

merci
0
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
25 janv. 2011 à 17:13
je t'informe que le fichiet client se crée normale mais je ne peut pas transferer les tableaux dans la fonction distante,
avec le fichier service.h du serveur je n'ai aucun probleme


merci
0
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
25 janv. 2011 à 23:52
Je ne comprends pas trop où tu veux en venir. Le fichier généré par wsdl2h correspond à ce qui est dans ton fichier wsdl.

class Array40000Ofdouble; 

// Decl de Array40000Ofdouble

int ns2__test1(
  Array40000Ofdouble* a, ///< Request parameter
  Array40000Ofdouble* b, ///< Request parameter
  int lon, ///< Request parameter
  double &r ///< Response parameter
); 


Notamment le préfixe associé au namespace est bien ns2 dans ton fichier wsdl. Et la fonction mouline deux types complexes Array40000Ofdouble. C'est donc parfaitement logique.

Maintenant regardons le fichier actuel :

int ns__test1(
  double a[40000],
  double b[40000],
  int lon,
  double * r
); 


Le namespace ns est incorrect. Le type des deux premiers paramètres est incorrect (ce n'est pas le type complexe dont il est question dans le wsdl, c'en est une simplification). Enfin le dernier argument est un pointeur au lieu d'une référence.

En gros tu reproches à wsdl2h de générer un header qui est cohérent avec le fichier wsdl alors que le .h et le .c actuel ne le suivent pas. Pour moi il faudrait simplement utiliser le header généré par wsdl2h et corriger le fichier .c en conséquence. Enfin ça devra même être un .cpp puisque manifestement le header généré par wsdl2h manipule une référence (qui existe en c++ mais pas en c).

Bonne chance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
26 janv. 2011 à 01:00
merci
le probleme que le fichier .wsdl qui se genere mal regardez cette partie ds tableaux

<message name="test1Request">
<part name="a" type="ns:Array40000Ofdouble"/>
<part name="b" type="ns:Array40000Ofdouble"/>
<part name="lon" type="xsd:int"/>
</message>
0
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
26 janv. 2011 à 19:28
??

Je n'ai pas compris ce que tu voulais dire.
0
yuri648 Messages postés 677 Date d'inscription mardi 30 décembre 2008 Statut Membre Dernière intervention 20 mai 2015 7
29 janv. 2011 à 11:50
merci j'ai reglé mon probleme des tableaux
je l'ai declaré comme struct au niveau du fichier serveur, et j'ai changé les parametres de la fonction

struct tab
{
double _ptr*
int size



}

merci
0
mamiemando Messages postés 33378 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 25 novembre 2024 7 802
Modifié par mamiemando le 29/01/2011 à 13:13
Parfait, merci pour ces précisions et bonne continuation !
0