Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Webservices (wsdl) und dynamische Arrays (https://www.delphipraxis.net/80747-webservices-wsdl-und-dynamische-arrays.html)

LuckySpacy 14. Nov 2006 16:46


Webservices (wsdl) und dynamische Arrays
 
Ich möchte über eine vorhandene wsdl-Datei Daten versenden.
Dazu habe ich die wsdl-Datei in Delphi 7 übernommen.

Unter anderem wurde folgendes generiert:
Delphi-Quellcode:
 
  WarrantyArticle = class(TRemotable)
  private
    FarticleNumber: WideString;
    FrequestedAmount: Integer;
  published
    property articleNumber : WideString read FarticleNumber write FarticleNumber;
    property requestedAmount: Integer   read FrequestedAmount write FrequestedAmount;
  end;

  WarrantyApplication = class(TRemotable)
  private
    FapplicantName     : WideString;
    Farticle           : WarrantyArticle;
  public
    destructor Destroy; override;
   published
    property applicantName     : WideString read FapplicantName write FapplicantName;
    property article           : WarrantyArticle read Farticle write Farticle;
  end;
Übertragen wird dann sowas:

<applicantName>ApplicantName</applicantName>
- <article>
<articleNumber>9022 371 1020</articleNumber>
<requestedAmount>5</requestedAmount>
</article>

Soweit funktioniert das ganze auch einwandfrei.
Nur in der wsdl-Datei steht bei Article, dass es sich hierbei um einen Array handelt.
Irgendwie hat mir Delphi das hier falsch übersetzt.
Denn wie soll ich hierbei mehrere Datensätze übertragen?

Deshalb habe ich das ganze etwas angepasst.

Delphi-Quellcode:
  WarrantyArticle = class(TRemotable)
  private
    FarticleNumber: WideString;
    FrequestedAmount: Integer;
  published
    property articleNumber : WideString read FarticleNumber write FarticleNumber;
    property requestedAmount: Integer   read FrequestedAmount write FrequestedAmount;
  end;

  ArticleArray = array of WarrantyArticle; // wurde von mir hinzugefügt

  WarrantyApplication = class(TRemotable)
  private
    FapplicantName     : WideString;
    FArticleArray      : ArticleArray;
  public
    destructor Destroy; override;
   published
    property applicantName     : WideString   read FapplicantName write FapplicantName;
    property article           : ArticleArray read FArticleArray write FArticleArray; // geändert
  end;
Wenn ich das ganze jetzt ordentlich fülle, dann kommt dabei sowas raus:

<applicantName>ApplicantName</applicantName>
- <article>
- <WarrantyArticle>
<articleNumber>9022 371 1020</articleNumber>
<requestedAmount>5</requestedAmount>
</WarrantyArticle>
- <WarrantyArticle>
<articleNumber>0000 988 5211</articleNumber>
<requestedAmount>1</requestedAmount>
</WarrantyArticle>
</article>

Hier bekomme ich eine Fehlermeldung:
WarrantyArticle kann nicht entserialisiert werden.

Was ich auch verstehen kann. Denn ich brauche folgenden Aufbau:

<applicantName>ApplicantName</applicantName>
- <article>
<articleNumber>9022 371 1020</articleNumber>
<requestedAmount>5</requestedAmount>
</article>
- <article>
<articleNumber>0000 988 5211</articleNumber>
<requestedAmount>1</requestedAmount>
</article>

Also nix mit WarrantyArticle.
Egal was und wie ich es auch versuche, ich bekomme diesen Aufbau nicht hin.
Kann mir jemand dabei helfen?

LuckySpacy 16. Nov 2006 07:52

Re: Webservices (wsdl) und dynamische Arrays
 
Ich habe ein wenig im Internet recherchiert.
Dabei bin ich auf folgende Links gestoßen:

WSDL Importer does not generate Array types from MaxOccurs="unbounded"

und auf diesen

Delphi 2006 Win32 WSDL Importer not generating Array Types

Dies beschreibt genau das Problem, das ich zur Zeit auch habe.

Wie aus dem Workaround hervorgeht, gibt es bis heute kein bugfix.

Mir scheint, dass das handling mit WSDL in Delphi noch nicht ganz ausgereift ist.

Ich habe mich diesbezüglich auch schon hier dazu geäußert:
Bugs in Webservices von Delphi

Sollte jemand eine Lösung gefunden haben, dann wäre ich dankbar, wenn er dies hier posten würde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz