Einzelnen Beitrag anzeigen

Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#1

Ableitung eines Abstract Types instanziieren

  Alt 16. Okt 2015, 12:06
Ich kämpfe mit der Erzeugung eines SOAP-Envelopes. Mir zur Verfügung steht eine WSDL, die einen Stapel XSD referenziert. Ich habe ein konkretes Problem bei der korrekten Erzeugung eines Knotens. Hier mal ein Auszug aus den Definitionen:
Code:
   <xsd:element name="Request" type="Request" />
   <xsd:complexType name="Request">
      <xsd:sequence>
         <xsd:element ref="ClientInfo" />
         <xsd:element ref="WorkflowInfoRequest" />
         <xsd:element name="RequestDetail" type="RequestDetail" />
      </xsd:sequence>
      <xsd:attribute name="schemaVersion" type="xsd:decimal" use="required" fixed="1.0" />
   </xsd:complexType>

   <xsd:complexType name="RequestDetail" abstract="true" />
In einer anderen XSD dann
Code:
   <xsd:element name="AnzeigeGeburtRequest" type="AnzeigeGeburtRequest"/>
   <xsd:complexType name="AnzeigeGeburtRequest">
      <xsd:complexContent>
         <xsd:extension base="AnzeigeRequest">
            <xsd:sequence>
               <xsd:element ref="AnzeigeGeburt"/>
            </xsd:sequence>
         </xsd:extension>
      </xsd:complexContent>
   </xsd:complexType>
Ein gültiges XML würde dann zum Beispile beinhalten:

Code:
<ns3:RequestDetail xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns3:AnzeigeGeburtRequest">
            <ns3:AnzeigeGeburt>
               <ns3:EntityInfo>
                  <ns3:SourceSystem>ZPS</ns3:SourceSystem>
                  <ns3:Zeitpunkt />
                  <ns3:DurchgefuehrtVon>
Hier nun mein Problem: Wie bekomme ich Delphi beigebracht, daß der Knoten RequestDetail genauso wie im Beispiel auszusehen hat? Der SOAP Assistent bringt mir übrigens nicht, da ich den Soap-Envelope als XML-Datei an ein anderes Programm geben muss, und die ObjectTosOAP-Methode in einen Schemafehler läuft. Darum habe ich den SOAP-Anteil entfernt und die XSDs selbst per Assistenten eingebunden. Das klappt weitestgehend bisher, nur bekomme ich eben diese Abstrakt nach Konkretisierung nicht geregelt.
Ich versuche zB:

Delphi-Quellcode:
  einRequest.RequestDetail.DeclareNamespace('xsi', XSI_NS);
  einRequest.RequestDetail.SetAttributeNS('xsi:type', '',TYPE_GEBURT);
Und bekomme mit Ausführung der zweiten Zeile den foglenden Fehler:
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt GebDat_QS.exe ist eine Exception der Klasse EOleException mit der Meldung 'Verweis auf ein nicht deklariertes Namespace-Präfix: 'xsi'' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Ich bin in XML so gar nicht versiert...eventuell gibt es hier aber jemanden, der mir helfen kann?

Gruß,
Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat