AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SOAP, WSDL und Arrays

Ein Thema von BensonIT · begonnen am 20. Aug 2021 · letzter Beitrag vom 26. Aug 2021
Antwort Antwort
BensonIT

Registriert seit: 20. Aug 2021
3 Beiträge
 
#1

SOAP, WSDL und Arrays

  Alt 20. Aug 2021, 19:54
Hallo,

ich bin gerade dabei eine Delphi Anwendung gegen einen Web-Service zu programmieren.
XML ist mir nicht ganz unbekannt, ich würde mich jedoch nicht als XML Profi, vor allem bei den Schemas, bezeichnen.

Problembeschreibung: Entwicklungsumgebung ist Delphi 10.4.2.

Ich habe die WSDL Informationen vom Web-Service abgerufen, und kann diesen grundsätzlich auch bedienen.
An einer Stelle muss ich dem Web-Service eine Liste von GUIDs (in diesem Fall vom Typ String) übergeben.
Die Definition im WSDL sieht so aus:

guid = type string; { "http://schemas.microsoft.com/2003/10/Serialization/"[GblSmpl] }
ArrayOfguid = array of guid; { "http://schemas.microsoft.com/2003/10/Serialization/Arrays"[GblCplx] }

Ich definiere also eine Variable vom Typ ArrayOfguid und baue dort das Array in der Anwendung so auf:

sGuid := '00000000-0000-0000-0000-000000000001';
setlength(aContentIDs, 1);
aContentIDs[0] := sGuid;

Das Ergebnis was per SOAP an den Web-Service zurückgegeben wird sieht so aus:

<ContentIDs>
<guid>00000000-0000-0000-0000-000000000001</guid>
</ContentIDs>

Der Web-Service erwartet jedoch die Übergabe des Arrays in folgendem Format:

<ContentIDs>
<a:guid>00000000-0000-0000-0000-000000000001</a:guid>
</ContentIDs>

Wie bekomme ich es jetzt aber hin, dass das "a:" vor die "guid" gesetzt wird?

Vielen Dank und Grüße,
Falko
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: SOAP, WSDL und Arrays

  Alt 23. Aug 2021, 10:24
Hallo Falko,

hast du die WSDL in Delphi importiert, um die den passenden Quelltext generieren zu lassen?

Siehe:
https://www.youtube.com/watch?v=PLOfjr0ocHQ
https://docwiki.embarcadero.com/RADS...en_WSDL-Import
  Mit Zitat antworten Zitat
BensonIT

Registriert seit: 20. Aug 2021
3 Beiträge
 
#3

AW: SOAP, WSDL und Arrays

  Alt 23. Aug 2021, 22:48
Ja, ich habe die WSDL über den Import-Wizard von Delphi erstellen lassen. Den Web-Service kann ich generell auch ansteuern, nur bei den Arrays scheint Delphi keine Namespaces einzusetzen - der in C# geschriebene Web-Service erwartet diese aber zwingend.

Nun versuche ich gerade einen OnBeforeExecute Event beim HTTPRIO einzubinden, damit ich den Request anpassen kann. Dabei lässt sich aber meine neue Prozedur nicht dem Ereignis zuweisen (inkompatible Typen Methodenanzeiger vs. reguläre Prozedur).
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#4

AW: SOAP, WSDL und Arrays

  Alt 24. Aug 2021, 00:15
Ganz notfalls kannst du die WSDL mit SOAPUI einlesen und dir dort ein XML generieren lassen. Dieses nimmst du dann einfach ins Delphi.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: SOAP, WSDL und Arrays

  Alt 24. Aug 2021, 08:20
Nun versuche ich gerade einen OnBeforeExecute Event beim HTTPRIO einzubinden, damit ich den Request anpassen kann. Dabei lässt sich aber meine neue Prozedur nicht dem Ereignis zuweisen (inkompatible Typen Methodenanzeiger vs. reguläre Prozedur).
Deine procedure fliegt einfach lose herum. Du musst sie zu einem Bestandteil einer lebenden Klasseninstanz machen.
Siehe auch die Definition von TBeforeExecuteEvent in der Unit Soap.Rio:

TBeforeExecuteEvent = procedure(const MethodName: string; SOAPRequest: TStream) of object;
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: SOAP, WSDL und Arrays

  Alt 24. Aug 2021, 13:58
Erstelle Dir einen eigenen ObjectConverter (TOPSOAPtoDomConvert) der das xml generiert.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
435 Beiträge
 
Delphi 12 Athens
 
#7

AW: SOAP, WSDL und Arrays

  Alt 24. Aug 2021, 17:36
So richtig kann ich das Problem nicht erkennen: Wenn die WSDL importiert wurde, wird eine .pas-Datei erzeugt. Die kommt in die uses-Klausel. Dann den WebService über einen HTTPRIO-Verbinden - etwa so:
WS:=[die_erstellte_pas-Datei_aus_der_wsdl].Get[wieauchimmer](false, [hierdieAufrufAdresse], HTTPRIO1); Dann über den Opbjektinspektor das OnBeforeExecute-Ereignis von HTTPRIO1 erzeugen und folgenden Eintrag machen:
Delphi-Quellcode:
procedure xxx.HTTPRIO1.BeforeExecute(const MethodName: string; SOAPRequest: TStream);
begin
with TStringList.Create do
 try
 SOAPRequest.Position:=0;
 LoadFromStream(SOAPRequest, TEncoding.UTF8);
 Text:= //hier den Text beliebig manipulieren
 Text:= //z.B. Text:=StringReplace(Text, '<guid>', '<a:guid>', [rfReplaceAll]);
 SOAPRequest.Position:=0; SOAPRequest.Size:=0;
 SaveToStream(SOAPRequest, TEncoding.UTF8);
 finally Free; end;
end;

Geändert von Papaschlumpf73 (24. Aug 2021 um 17:52 Uhr)
  Mit Zitat antworten Zitat
BensonIT

Registriert seit: 20. Aug 2021
3 Beiträge
 
#8

AW: SOAP, WSDL und Arrays

  Alt 26. Aug 2021, 22:38
Super, die Klasseninstanz war das richtige Stichwort.
Vielen lieben Dank euch allen!
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz