Einzelnen Beitrag anzeigen

moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

SOAP : Array items mit falschem Namen

  Alt 1. Jun 2010, 09:13
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:
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.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat