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

Web & réseau Delphi Discussion :

Webservice - Erreur en allemand sans aucun sens


Sujet :

Web & réseau Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 43
    Points
    43
    Par défaut Webservice - Erreur en allemand sans aucun sens
    Bonjour,

    Deux problèmes en un avec un webservice...

    Je suis sur Windows XP SP2 avec Delphi 6 Enterprise, version Française, et j'ai importé un WSDL pour invoquer un webservice. Le serveur, lui, est un MockService sous SOAPUI.

    Mon problème est le suivant : quand j'invoque le webservice, je ne vois rien arriver côté serveur mais j'ai une belle erreur remonté par mon client Delphi :
    Konvertierung der Klasse TButton in SOAP wird nicht unterstützt

    Le message est en Allemand (1ère erreur) et il ne veut rien dire (2ème erreur). En Français, ça dit grosso modo "La conversion de la classe TButton dans SOAP n'est pas gérée".

    Q1 : avez-vous la moindre idée de la raison pour laquelle le message d'erreur est en Allemand ? Je précise que toutes mes options régionales sont sur "Français".

    Q2 : savez-vous ce que signifie réellement ce message d'erreur sachant qu'en dehors du bouton sur le quel je clique, à aucun moment je ne fais référence à un TButton ?

    D'avance, merci de votre aide.

    Ci-dessous, le webservice:

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    // ************************************************************************ //
    // Les types déclaré dans ce fichier ont été générés à partir de données lues dans le fichier
    // WSDL décrit ci-dessous :
    // WSDL     : C:\Documents and Settings\ade6399\Bureau\Hello.wsdl
    // Encodage : UTF-8
    // Version  : 1.0
    // (29/06/2009 10:20:37 - $Revision:   1.9.1.0.1.0.1.9  $)
    // ************************************************************************ //
     
    unit Hello;
     
    interface
     
    uses InvokeRegistry, Types, XSBuiltIns;
     
    type
     
      // ************************************************************************ //
      // Les types suivants mentionnés dans le document WSDL ne sont pas représentés
      // dans ce fichier. Ce sont soit des alias[@] de types représentés ou alors ils sont 
      // référencés mais jamais[!] déclarés dans ce document. Les types de la dernière catégorie
      // sont en principe mappés à des types Borland ou XML prédéfinis/connus. Toutefois, ils peuvent aussi
      // signaler des documents WSDL incorrects n'ayant pas réussi à déclarer ou importer un type de schéma.
      // ************************************************************************ //
      // !:string          - "http://schemas.xmlsoap.org/soap/encoding/"
     
      HelloParametre    = class;                 { "http://parametre.metier.hello.cristal.disf.laposte.fr" }
      HelloDataBean     = class;                 { "http://donnees.modele.hello.cristal.disf.laposte.fr" }
     
     
     
      // ************************************************************************ //
      // Espace de nommage : http://parametre.metier.hello.cristal.disf.laposte.fr
      // ************************************************************************ //
      HelloParametre = class(TRemotable)
      private
        Fparametre: String;
      published
        property parametre: String read Fparametre write Fparametre;
      end;
     
     
     
      // ************************************************************************ //
      // Espace de nommage : http://donnees.modele.hello.cristal.disf.laposte.fr
      // ************************************************************************ //
      HelloDataBean = class(TRemotable)
      private
        Fmsg: String;
      published
        property msg: String read Fmsg write Fmsg;
      end;
     
     
      // ************************************************************************ //
      // Espace de nommage : urn:helloservice
      // transport : http://schemas.xmlsoap.org/soap/http
      // style     : rpc
      // liaison   : HelloSoapBinding
      // service   : HelloServiceService
      // port      : Hello
      // URL       : http://localhost:9080/BQ_/services/Hello
      // ************************************************************************ //
      HelloService = interface(IInvokable)
      ['{A3CCE649-1F8D-E32D-38B4-7AAE57E0A4AE}']
        function  sayHello(const in0: HelloParametre): HelloDataBean; stdcall;
      end;
     
    function GetHelloService(UseWSDL: Boolean=System.False; Addr: string=''): HelloService;
     
     
    implementation
      uses SOAPHTTPClient;
     
    function GetHelloService(UseWSDL: Boolean; Addr: string): HelloService;
    const
      defWSDL = 'C:\Documents and Settings\ade6399\Bureau\Hello.wsdl';
      defURL  = 'http://127.0.0.1:8088/mockHelloLBPSoapBinding';
      defSvc  = 'HelloServiceService';
      defPrt  = 'Hello';
    var
      RIO: THTTPRIO;
    begin
      Result := nil;
      if (Addr = '') then
      begin
        if UseWSDL then
          Addr := defWSDL
        else
          Addr := defURL;
      end;
      RIO := THTTPRIO.Create(nil);
      try
         if UseWSDL then
        begin
          RIO.WSDLLocation := Addr;
          RIO.Service := defSvc;
          RIO.Port := defPrt;
        end else
          RIO.URL := Addr;
        Result := (RIO as HelloService);
      finally
        if Result = nil then
          RIO.Free;
      end;
    end;
     
     
    initialization
      InvRegistry.RegisterInterface(TypeInfo(HelloService), 'urn:helloservice', 'UTF-8');
      InvRegistry.RegisterDefaultSOAPAction(TypeInfo(HelloService), '');
      RemClassRegistry.RegisterXSClass(HelloParametre, 'http://parametre.metier.hello.cristal.disf.laposte.fr', 'HelloParametre');
      RemClassRegistry.RegisterXSClass(HelloDataBean, 'http://donnees.modele.hello.cristal.disf.laposte.fr', 'HelloDataBean');
     
    end.
    www.ferraridefrance.com - www.autoccaz.com
    DELPHI 4-5-6-7, PHP 4, VB 4-5-6, J2EE, ADA, C++, SIEBEL 7, COBOL... DB2 OS/390, Access...

  2. #2
    Membre du Club
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Points : 43
    Points
    43
    Par défaut
    J'ai trouvé pour quelle raison l'erreur était levée : quand on appelle un webservice depuis Delphi avec des arguments de types non primitifs (c'est-à-dire autre que String, Integer...), il faut bien initialiser chacun de ces arguments via le constructeur Create() du type donné.

    Dans mon cas, je faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.btnTestClick(Sender: TObject);
    var
      svc: HelloService;
      parametre: HelloParametre;
      resp: HelloDataBean;
    begin
      try
        parametre.parametre:= Trim(edtParametre.Text);
        svc:= GetHelloService(false, edtWSDL.Text);
        Trace(svc.sayHello(parametre).message);
      except
        on E: Exception do Trace(E.Message);
      end;
    end;
    Alors qu'il fallait faire :
    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
    procedure TForm1.btnTestClick(Sender: TObject);
    var
      svc: HelloService;
      parametre: HelloParametre;
      resp: HelloDataBean;
    begin
      try
        parametre := HelloParametre.Create; // Il manquait ça
        parametre.parametre:= Trim(edtParametre.Text);
        svc:= GetHelloService(false, edtWSDL.Text);
        Trace(svc.sayHello(parametre).message);
      except
        on E: Exception do Trace(E.Message);
      end;
    end;
    Bien sûr, ça n'explique pas pourquoi le message d'erreur est en Allemand sur cette erreur, sûrement une belle "coquille" de Delphi...
    www.ferraridefrance.com - www.autoccaz.com
    DELPHI 4-5-6-7, PHP 4, VB 4-5-6, J2EE, ADA, C++, SIEBEL 7, COBOL... DB2 OS/390, Access...

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

Discussions similaires

  1. [WD15] Sqlexec erreur sans aucun message
    Par gancau dans le forum WinDev
    Réponses: 10
    Dernier message: 10/02/2011, 12h13
  2. Erreur F2063, sans aucun indice
    Par sovitec dans le forum Langage
    Réponses: 2
    Dernier message: 27/05/2010, 17h47
  3. JavaMail n'envoi rien et sans aucune erreur !
    Par need2learn dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 1
    Dernier message: 09/11/2009, 17h14
  4. [AJAX] [Scriptaculous] Prog sans erreur mais sans aucun résultat
    Par popovitch130 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/05/2008, 13h34
  5. Réponses: 2
    Dernier message: 08/01/2008, 23h46

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