Aus WSDL importieren: generierte Objekte und Einschränkungen

In diesem Abschnitt werden die beim Importieren einer WSDL-Definition generierten Objekte sowie einige zu beachtende Einschränkungen beschrieben.

Generierte Objekte

Dateien, die beim Import über die Befehlszeile kopiert werden
Der Befehl mqsicreatemsgdefsfromwsdl kopiert die benötigten WSDL-Dateien in den Arbeitsbereich, bevor der Importprozess ausgeführt wird. Dabei handelt es sich um die WSDL-Datei der höchsten Ebene und alle Imports, die mit Hilfe einer absoluten oder relativen Position ermittelt werden. Die Dateien werden unter die angegebene Nachrichtengruppe in einem Ordner mit dem Namen 'importFiles' kopiert.
Berichtsdatei
Das WSDL-Importprogramm hängt das Ergebnis der Importoperation an eine Berichtsdatei an, wobei alle bei dieser Operation aufgetretenen Fehler aufgelistet werden. Der Name der Berichtsdatei lautet <Nachrichtengruppe>.wsdl.report.txt.
SOAP-Nachrichtendefinitionen
Die erforderlichen SOAP-mxsd-Dateien werden zur Nachrichtengruppe hinzugefügt. Zurzeit werden immer die SOAP 1.1-Definitionen importiert. Hierfür gibt es mehrere Gründe:
  • SOAP 1.1 ist weiter verbreitet als SOAP 1.2.
  • Es gibt keine SOAP 1.2-Standardbindung für WSDL 1.1. Dies bedeutet, dass das WSDL-Importprogramm nicht verlässlich erkennen kann, dass SOAP 1.2 erforderlich ist.
  • Es ist nicht möglich, sowohl SOAP 1.1- als auch SOAP 1.2-Definitionen zu importieren, weil sie denselben Nachrichtennamen verwenden (z. B. Envelope).

Wenn Sie Dokumente einer SOAP 1.2-Instanz analysieren müssen, sollten Sie die SOAP 1.1-Definitionen manuell entfernen und die SOAP 1.2-Definitionen über den Assistenten für Nachrichtendefinitionsdateien importieren, indem Sie IBM eigene Nachricht auswählen.

Wenn Ihre Nachrichtengruppe TDS- oder CWF-Schichten enthält, werden möglicherweise eine Reihe von Warnungen bezüglich der importierten SOAP-Definitionen angezeigt. Die meisten davon können ignoriert werden, Sie sollten jedoch die zulässigen Werte für Boolesche Attribute beachten. In SOAP 1.1 hat ein Boolescher Wert den Wert 1 oder 0, während die Werte in SOAP 1.2 'true' (wahr) und 'false' (falsch) lauten. Die XML-Darstellung von Booleschen Werten für eine Nachrichtengruppe wird in den physischen Eigenschaften für das physische XML-Format angegeben und muss gegebenenfalls entsprechend eingestellt werden.

Nachrichtendefinitionsdateien
Andere Nachrichtendefinitionsdateien werden mit dem Namen <Eingabedateiname>.mxsd erstellt. Ihr Inhalt ist vom WSDL-Format abhängig.
Dokumentformat (style=document)
WSDL-Nachrichtenteile für style=”document” (dazu gehören die SOAP-Elemente 'header', 'fault' und 'headerfault') verweisen auf ein im XML-Schema definiertes Element. Dieses Element wird als globales Element und Brokernachricht in die mxsd-Datei importiert.

Die 'Ausgaberichtlinie für Attribut vom Typ xsi:type' wird auf 'Nie' gesetzt.

RPC-Format (style=rpc)
WSDL-Nachrichtenteile für style=”rpc” (und ausschließlich solche, die dem SOAP-Hauptteil zugeordnet sind) verweisen auf einem im XML-Schema definierten Typ. In diesem Fall werden Ein- und Ausgabenachrichten auf folgende Weise erstellt:
  Eine Eingabenachricht Eine Ausgabenachricht
Abgeleitet von untergeordnetem Element wsdl:input (falls vorhanden) von WSDL-Operation sowie der WSDL-Nachricht und den Nachrichtenteilen, die es identifiziert untergeordnetem Element wsdl:output (falls vorhanden) von WSDL-Operation sowie der WSDL-Nachricht und den Nachrichtenteilen, die es identifiziert
Name des Elements Wert des Namensattributs (name) im WSDL-Operationselement (operation) Wert des Namensattributs (name) im WSDL-Operationselement (operation) mit dem Suffix 'Response'
Namensbereich des Elements Wert des Namensbereichsattributs (namespace) im entsprechenden soap:body-Element Wert des Namensbereichsattributs (namespace) im entsprechenden soap:body-Element

Jede Nachricht ist ein lokaler komplexer Typ, bestehend aus einer Folge von Elementen. Der Name jedes Elements entspricht dem Wert des Namensattributs (name) in den WSDL-Teilen (part-Elementen) der Nachricht, die durch das 'input' bzw. 'output'-Element identifiziert wird. Diese Elemente besitzen keinen Namensbereich (die zu Grunde liegende Schemadarstellung enthält form="unqualified") und werden lokal Bereichen zugeordnet, um Namenskollisionen zu vermeiden. Der Typ dieser lokalen Elemente ist der XML-Schematyp, auf den das Typattribut (type) des entsprechenden 'part'-Elements verweist. (Der Typ im WSDL-Schema ist ein globaler Typ.)

Wenn soap:body in der WSDL-Definition mit use="encoded" definiert wurde, beinhaltet die Nachrichtendefinition einen Verweis auf die Attributgruppe 'encodingStyle' im SOAP-ENV-Namensbereich, und die 'Ausgaberichtlinie für Attribut vom Typ 'xsi:type' für die Nachricht wird auf 'SOAP-Codierungsregeln befolgen' gesetzt. Andernfalls wird die 'Ausgaberichtlinie für Attribut vom Typ xsi:type' für die Nachricht auf 'Nie' gesetzt.

Einschränkungen

In diesem Abschnitt werden die Einschränkungen beim Importieren von WSDL-Definitionen beschrieben. Sie gelten dann, wenn die WSDL-Definitionen nicht WS-I-konform sind.
SOAP-Arrays
Eine WSDL 1.1-Definition kann ein SOAP-Array definieren (gilt nur für das RPC-codierte WSDL-Format und ist nicht WS-I-konform):
    <xsd:complexType name="t">
          <xsd:complexContent>
            <xsd:restriction base="SOAP-ENC:Array">
              <xsd:sequence>
                <xsd:element name="item" type="string" maxOccurs="unbounded"/>
              </xsd:sequence>
              <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:string[]"/>
            </xsd:restriction>
          </xsd:complexContent>
    </xsd:complexType>

Nicht jede SOAP-Array-Syntax wird in vollem Umfang unterstützt. Auch wenn beim Analysieren eine brauchbare Baumstruktur erstellt wird (und beim Schreiben serialisiert werden kann), sollten Sie Folgendes beachten:

  • Das Modell berücksichtigt nicht das Attribut SOAP-ENC:arrayType.
  • Das Modell für teilweise übertragene Arrays berücksichtigt nicht das Attribut SOAP-ENC:offset.

    Beispielsweise würde auf das erste Element eines mit offset[2] definierten Arrays in ESQL nicht als InputRoot.MRM.array.item[3], sondern als InputRoot.MRM.array.item[1] zugegriffen.

  • Das Modell für mehrdimensionale Arrays verflacht die Darstellung zu einem eindimensionalen Array. Beispielsweise wird auf ein zweidimensionales Array in ESQL nicht als InputRoot.MRM.array.item[x][y], sondern als InputRoot.MRM.array.item[i] zugegriffen, wobei der Index i entsprechend berechnet werden müsste.
Anonyme Elemente
Der WSDL-Auszug oben beschreibt ein SOAP-Instanzdokument in folgender Form:
    <SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[3]">
       <item xsi:type="xsd:string">Eine allgemeine Textzeichenfolge</item>
       <item xsi:type="xsd:token">Eine Einschränkung des Zeichenfolgetyps</item>
       <item xsi:type="xsd:Name">Eine Einschränkung des Token-Typs</item>
    </SOAP-ENC:Array>

Das Brokermodell bearbeitet dieses Dokument wie erwartet, aber bei der SOAP-Codierung können Array-Elemente auch die 'type'-Elemente aus dem SOAP-Codierungsnamensbereich verwenden. Das heißt, eine Anwendung, die dieselbe WSDL-Definition verwendet, erstellt möglicherweise ein Instanzdokument in folgender Form:

    <SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[3]">
       <SOAP-ENC:string>Eine allgemeine Textzeichenfolge</SOAP-ENC:string>
       <SOAP-ENC:token>Eine Einschränkung des Zeichenfolgetyps</SOAP-ENC:token>
       <SOAP-ENC:Name>Eine Einschränkung des Token-Typs</ SOAP-ENC:Name>
    </SOAP-ENC:Array>

Das beim Importieren der WSDL-Definition erstellte Brokermodell müsste manuell geändert werden, damit es diesen Vorgang bearbeiten kann, es sein denn, es ist akzeptabel, dass der Parser ihn wie ein selbstdefiniertes Element behandelt.

Zugehörige Konzepte
Nachrichten modellieren
Das Nachrichtenmodell
Zugehörige Tasks
Nachrichtenmodelle entwickeln
Mit Nachrichtendefinitionsdateien arbeiten
Mit Nachrichtenmodellobjekten arbeiten
Zugehörige Verweise
Nachrichtenmodellverweisinformationen
Importformate
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 23. Aug. 2006
ad30560_