Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi SOAP : Array items mit falschem Namen (https://www.delphipraxis.net/151769-soap-array-items-mit-falschem-namen.html)

moelski 1. Jun 2010 09:13


SOAP : Array items mit falschem Namen
 
Moin !

So jetzt habe ich aber dennoch ein Problem mit meinem Webservice.
Ich muss für den Webservice Aufruf eine Struktur aufbauen. Und ein Teil dieser Struktur ist das hier:
Delphi-Quellcode:
  ServiceRequestHeader = class(TRemotable)
  private
    FDocumentReference: ArrayOfDocumentReference;
    FDocumentReference_Specified: boolean;
    procedure SetDocumentReference(Index: Integer; const AArrayOfDocumentReference: ArrayOfDocumentReference);
    function DocumentReference_Specified(Index: Integer): boolean;
  public
    destructor Destroy; override;
  published
    property DocumentReference:     ArrayOfDocumentReference   Index (IS_OPTN) read FDocumentReference write SetDocumentReference stored DocumentReference_Specified;
  end;
Ist sehr stark gekürzt. Aber es geht auch nur um das ArrayOfDocumentReference.

ArrayOfDocumentReference ist so definiert:
Delphi-Quellcode:
ArrayOfDocumentReference = array of ArrayOfDocumentReferenceItem;
Und ArrayOfDocumentReferenceItem so ...
Delphi-Quellcode:
  // ************************************************************************ //
  // XML      : ArrayOfDocumentReferenceItem, alias
  // ************************************************************************ //
  ArrayOfDocumentReferenceItem = class(DocumentReference)
  private
  published
  end;
Ok, wenn ich jetzt in meinem Code alles zusammenbaue muss ich irgendwann auch DocumentReference füllen.
das mache ich so:
Delphi-Quellcode:
var _ArrayOfDocumentReference  : ArrayOfDocumentReference;
...
begin
...
    SetLength(_ArrayOfDocumentReference, 2);
    _ArrayOfDocumentReference[0] := ArrayOfDocumentReferenceItem.Create;
    _ArrayOfDocumentReference[0].ReferenceType := 'xyz';
    _ArrayOfDocumentReference[0].ReferenceValue := 'xyz-000001';
    _ArrayOfDocumentReference[1] := ArrayOfDocumentReferenceItem.Create;
    _ArrayOfDocumentReference[1].ReferenceType := 'xyz';
    _ArrayOfDocumentReference[1].ReferenceValue := 'xyz-000001';
    _SR.ServiceRequest.ServiceRequestHeader.DocumentReference := _ArrayOfDocumentReference;
Das fonktioniert auch. Aber wenn ich mir dann die Rohdaten in der SOAP Message ansehe, dann kommt da das bei rum:
XML-Code:
<DocumentReference>
   <item>
      <ReferenceType>xyz</ReferenceType>
      <ReferenceValue>xyz-000001</ReferenceValue>
   </item>
   <item>
      <ReferenceType>xyz</ReferenceType>
      <ReferenceValue>xyz-000001</ReferenceValue>
   </item>
</DocumentReference>
Und ich frage mich nun warum da <item> steht und nicht <ArrayOfDocumentReferenceItem>.

Mache ich da was falsch beim Zusammensetzen und übergeben des Arrays?
Ist das evtl. ein (bekannter) Delphi Bug?

Falls ich irgendwas an wichtigen Infos vergessen habe, dann lasst es mich wissen.

moelski 1. Jun 2010 09:26

Re: SOAP : Array items mit falschem Namen
 
Ok ich habe schon rausgefunden das es in OPToSOAPDomConv.pas folgendes gibt:
Delphi-Quellcode:
DefArrayElemName: string = 'item';   { do not lcoalize }
Das bedeutet wohl das in der WSDL eine Definition fehlt !?

Der.faule.Christoph 5. Jul 2012 07:14

AW: SOAP : Array items mit falschem Namen
 
hast du ne lösung gefunden?


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