Einzelnen Beitrag anzeigen

Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#1

SOAP - Methode mit Array-Parameter?

  Alt 16. Sep 2019, 14:25
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
Ralf Kaiser
  Mit Zitat antworten Zitat