In diesem Abschnitt werden die beim Importieren einer WSDL-Definition generierten Objekte sowie einige zu beachtende Einschränkungen beschrieben.
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.
Die 'Ausgaberichtlinie für Attribut vom Typ xsi:type' wird auf 'Nie' gesetzt.
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.
<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:
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.
<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.