Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   SOAP - Methode mit Array-Parameter? (https://www.delphipraxis.net/201981-soap-methode-mit-array-parameter.html)

Ralf Kaiser 16. Sep 2019 13:25

SOAP - Methode mit Array-Parameter?
 
Hallo Hallo,

Wir müssen mit einem Webservice kommunizieren. Dabei spielt unsere Software sowohl Server als auch Client, es können also von der Gegenseite bei uns auch Methoden aufgerufen werden. Der Aufbau dieser Methoden wird allerdings nicht von uns sondern von unserem Partner festgelegt. Wir haben dazu eine WSDL erhalten die wir importiert haben um unseren Server zu erstellen (der WSDL-Import kann ja auch serverseitigen Code erzeugen, letztendlich geht es ja eigentlich nur um die Datentypen)

Eine der Methoden die bei uns aufgerufen werden nimmt ein Array eines bestimmten Datentyps entgegen und soll ein Arry eines anderen Datentyps als Ergebnis liefern.

Die Vorgabe ist, dass es sich um ein "unbound array" handelt bei dem die einzelnen Einträge direkt hintereinander übertragen werden, also nach diesem Muster:

Code:
<method_name>
  <param_array>
     <value1>TEST1</value1>
     <value2>123</value2>
  </param_array>
  <param_array>
     <value1>TEST2</value1>
     <value2>456</value2>
  </param_array>
  <param_array>
     <value1>TEST3</value1>
     <value2>789</value2>
  </param_array>
</method_name>
Wenn dieser Request bei der Delphi-SOAP Runtime ankommt dann werden die Parameter falsch ausgewertet: In diesem Beispiel werden ja 3 Elemente übergeben die jeweils 2 Eigenschaften ahben. Das Array das im Programm ankommt hat aber eine Länge von 2 (also die Anzahl der Eigenschaften eines einzelnen Parameters).

Erst wenn man die eigentlichen Parameter in einem weiteren Tag klammert (hier "<param>") wird die Liste von der SOAP Runtime richtig ausgewertet:

Code:
<method_name>
  <param_array>
     <param>
        <value1>TEST1</value1>
        <value2>123</value2>
     </param>
  </param_array>
  <param_array>
     <param>
        <value1>TEST2</value1>
        <value2>456</value2>
     </param>
  </param_array>
  <param_array>
     <param>
        <value1>TEST3</value1>
        <value2>789</value2>
     </param>
  </param_array>
</method_name>
Kann mir jemand einen Hinweis geben, welche Maßnahmen man ergreifen muss damit Delphi ein "unbound array" so auswertet wie im ersten Beispiel?

Es handelt sich hier aktuell um Delphi Tokyo mit allen Updates.

Vielen Dank schon mal,
Rafl

Union 16. Sep 2019 16:43

AW: SOAP - Methode mit Array-Parameter?
 
Wie sieht denn der aus dem WSDL generierte Code für die Property aus? Ist im Index IS_UNBD enthalten? Oder ist xoInlineArrays für den Datentyp registriert?

Ralf Kaiser 16. Sep 2019 17:02

AW: SOAP - Methode mit Array-Parameter?
 
Ja und Ja.

Allerdings handelt es sich nicht um ein Property sondern um den Parameter einer Methode.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 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