Zuordnung von SDO-Datengraphen für Web-Service-Nachrichten
Die Struktur von Web-Service-Nachrichten wird mit SDO-Datengraphen (Service Data Objects) der Version 1 für Web-Service-Nachrichten beschrieben.
Allgemeines Layout einer Web-Service-Nachricht
Eine Web-Service-Nachricht wird mit einer Formatierzeichenfolge und drei Metadatenfeldern (operationName, messageName und messageType) beschrieben. Die Nutzdaten der Nachricht werden auf die drei anderen Abschnitte, Header, Abhänge und Hauptteil (oder Body) verteilt.
Der Knoten Info ist der Ausgangsknoten im SDO-Datengraphen aller Web-Service-Nachrichten. In der folgenden Tabelle sind die Informationseigenschaften für Knoten und die zugehörigen Typen beschrieben.
Eigenschaftsname | Eigenschaftstyp | Eigenschaftsbeschreibung |
---|---|---|
operationName | java.lang.String | Gibt die WSDL-Operation an, die der Nachricht zugeordnet ist. Wenn der Service für Datenzugriff die Nachricht nicht erkennt, ist dieses Feld nicht definiert. Informationen hierzu finden Sie im Artikel Web-Service-Nachrichten erkennen. |
messageName | java.lang.String | Gibt die WSDL-Nachricht an, die der Nachricht zugeordnet ist. Wenn der Service für Datenzugriff die Nachricht nicht erkennt, ist dieses Feld nicht definiert. Informationen hierzu finden Sie im Artikel Web-Service-Nachrichten erkennen. |
messageType | java.lang.String | Gibt den WebService-Typ der Nachrichteninstanz an. Gültige Werte für dieses Feld sind input, output, fault und ambiguous. Wenn der Service für Datenzugriff die Nachricht nicht erkennt, ist dieses Feld nicht definiert. Informationen hierzu finden Sie im Artikel Web-Service-Nachrichten erkennen. |
headers | java.util.List von Datenobjekten. | Enthält eine Liste mit Datenobjekten für Headereinträge. Jeder SOAP-Header in der Nachricht führt zu einem Headereintrag in der Liste. Informationen hierzu finden Sie im Artikel Layout der Nachrichten-Header. |
attachments | java.util.List von Datenobjekten. | Enthält ein Liste mit Datenobjekten für Anhangseinträge. Für SOAP-Nachrichten mit Anhängen wird jeder MIME-Abschnitt der Nachricht (mit Ausnahme des MIME-Abschnitts mit dem SOAP-Envelope) einem Eintrag in dieser Liste zugeordnet. Informationen hierzu finden Sie im Artikel Layout von Nachrichtenanhängen. |
body | commonj.sdo.DataObject | Ein verschachteltes Datenobjekt für den Hauptteil (Body) der SOAP-Rahmenanweisung. Informationen hierzu finden Sie im Artikel Layout des Nachrichtenhauptteils. |
Web-Service-Nachrichten erkennen
Die Verarbeitung der Nachrichten richtet sich danach, ob die Nachrichten WSDL-Definition haben. Die für die Verarbeitung von Nachrichten ohne WSDL erforderlichen Mindestinformation ist "SOAP:" und für Nachrichten mit WSDL "SOAP:location,namespace,service,port". Wenn die Formatierzeichenfolge nicht alle fünf Felder enthält, versucht der SOPA-Datenzugriffsservice, die Nachricht ohne WSDL zu verarbeiten.
- Nachrichten ohne WSDL-Definitionen verarbeiten: Wenn die Formatierzeichenfolge nicht die vollständigen WSDL-Informationen enthält, verarbeitet der SOAP-Datenzugriffsservice die Nachricht, ohne zu versuchen, sie mit den Definitionen in der WSDL abzugleichen. operationName und messageName werden auf null gesetzt, und das Feld messageType wird nur gesetzt, wenn eine Fehlernachricht verarbeitet wird.
- Nachrichten mit WSDL-Definitionen verarbeiten: Wenn die Formatierzeichenfolge
<WSDL-Position>, <Service-Namespace>, <Servicename> und
<Portname> enthält, verarbeiten die SOAP- und Bean-Datenzugriffsservices die Nachricht mit den WSDL-Definitionen des Service.
Anmerkung: In den folgenden Situationen scheitert die Verarbeitung von SOAP-Nachrichten, nachdem alle erforderlichen WSDL-Informationen angegeben wurden:
- Der SOAP-Datenzugriffsserver findet die WSDL nicht.
- Die WSDL bestätigt die Nachricht nicht.
Wenn der SOAP-Datenzugriffsservice eine SOAP-Anforderung oder -Antwort verarbeitet, vergleicht er sie mit den Nachrichtendefinitionen in der WSDL. Normalerweise wird eine einzige Übereinstimmung gefunden, und die Felder operationName, messageName und messageType sind ordnungsgemäß ausgefüllt. Sind mehrere übereinstimmende Definitionen vorhanden, wählt der Datenzugriffsservice eine Nachrichtendefinition aus, füllt die Felder operationName und messageName aus und setzt das Feld messageType auf ambiguous.
Bei der Verarbeitung von Fehlernachrichten ist die Identifizierung geringfügig anders. In jedem Fall wird das Feld messageType auf gfault (Fehler) gesetzt. Wenn die Nachricht einer Fehlerdefinition in der WSDL eindeutig entspricht, werden operationName und messageName ebenfalls gesetzt.
Layout der Nachrichten-Header
Die Liste der Header kann zwei Arten von Einträgen enthalten: Headereinträge oder gebundene Headereinträge. Die Art der Einträge richtet sich danach, ob der Header auf einem Abschnitt der Nachricht basiert oder nicht.
- Der Header ist ein Abschnitt der Nachricht und wird in der WSDL modelliert.
- Der Header ist ein Abschnitt der Nachricht und wird nicht in WSDL modelliert, basiert aber auf einem Abschnitt der Nachricht.
Der gebundene Headereintrag wird verwendet, wenn die SOAP-Bindung für die Nachricht einen Abschnitt des Nachrichtenhauptteils (oder Body) in einem MIME-Anhang gebunden hat. (Dies passiert, wenn Sie ein Element <MIME:content> verwenden, um einen Abschnitt der Nachricht an einen Anhang zu binden.) Im Hinblick auf eine konsistente Mediationsprogrammierung werden alle Daten des Nachrichtenhauptteils im Knoten "Body" des Graphen gespeichert. Anders als ein normaler Anhangseintrag wird ein gebundener Anhangseintrag in die Anhangsliste gestellt. Der gebundene Anhangseintrag enthält die MIME-Metadaten für den Anhang und den Namen des Nachrichtenabschnitts, der die aus dem Anhang entnommenen Daten enthält. Damit sind Mediations, die für die Bearbeitung von Anhängen geschrieben wurden, in der Lage, die Daten im Hauptteil des Datengraphen zu finden. Ein Modell dieses Anhangs finden Sie im Abschnitt Gebundener Headereintrag.
Headereintrag
Eigenschaftsname | Eigenschaftstyp | Eigenschaftsbeschreibung |
---|---|---|
mustUnderstand | java.lang.Boolean | Überträgt den Wert des Attributs mustUnderstand im SOAP-Header (sofern vorhanden). |
actor | java.lang.String | Überträgt den Wert des Attributs actor im SOAP-Header (sofern vorhanden). |
any | commonj.sdo.Sequence | Container für den Inhalt des SOAP-Headers |
Gebundener Headereintrag
Eigenschaftsname | Eigenschaftstyp | Eigenschaftsbeschreibung |
---|---|---|
mustUnderstand | java.lang.Boolean | Überträgt den Wert des Attributs mustUnderstand im SOAP-Header (sofern vorhanden). |
actor | java.lang.String | Überträgt den Wert des Attributs actor im SOAP-Header (sofern vorhanden). |
messagePart | java.lang.String | Enthält den Namen des Nachrichtenabschnitts mit den Daten aus diesem Nachrichten-Header. |
Layout von Nachrichtenanhängen
Nachrichtenanhänge werden auf ähnliche Weise wie Header behandelt. Anhangsinstanzen werden in die Anhangsliste im Knoten Info aufgenommen.
Es gibt zwei Typen von Anhangseinträgen für MIME-Anhänge: Anhangseinträge und gebundene Anhangseinträge.
Anhangseinträge werden für allgemeine Anhänge verwendet. Weitere Informationen finden Sie im Artikel Anhangseintrag.
Gebundene Anhangseinträge enthalten <MIME:content>-Elemente, die einen Abschnitt des Hauptteils (oder Body) in einem MIME-Anhang binden. Wenn Sie eine Mediation programmieren, müssen Sie wissen, wo diese Daten innerhalb des Graphen zu finden sind. Im Hinblick auf eine konsistente Programmierung von Mediations werden die Anhangsdaten im Nachrichtenhauptteil (oder Body) gespeichert und unter dem Namen des Nachrichtenabschnitts im Headereintrag, der die anderen MIME-Metadaten enthält, referenziert. Ein Modell dieses Anhangs finden Sie im Abschnitt Gebundener Anhangseintrag.
Anhangseintrag
Eigenschaftsname | Eigenschaftstyp | Eigenschaftsbeschreibung |
---|---|---|
contentType | java.lang.String | Enthält den contentType aus dem MIME-Abschnitt, der vom Anhangseintrag dargestellt wird. |
contentTransferEncoding | java.lang.String | Enthält die contentTransferEncoding aus dem MIME-Abschnitt, der vom Anhangseintrag dargestellt wird. |
contentId | java.lang.String | Enthält die contentId aus dem MIME-Abschnitt, der vom Anhangseintrag dargestellt wird. |
data | byte[] | Enthält den Inhalt des MIME-Elements in Form einer Bytefeldgruppe. |
Gebundener Anhangseintrag
Eigenschaftsname | Eigenschaftstyp | Eigenschaftsbeschreibung |
---|---|---|
contentType | java.lang.String | Enthält den contentType aus dem MIME-Abschnitt, der vom Anhangseintrag dargestellt wird. |
contentTransferEncoding | java.lang.String | Enthält die contentTransferEncoding aus dem MIME-Abschnitt, der vom Anhangseintrag dargestellt wird. |
contentId | java.lang.String | Enthält die contentId aus dem MIME-Abschnitt, der vom Anhangseintrag dargestellt wird. |
messagePart | java.lang.String | Enthält den Namen des Nachrichtenabschnitts, der die Daten aus diesem Anhang enthält. |
Layout des Nachrichtenhauptteils
Das Layout des Datenobjekts im Nachrichtenhauptteil (oder Body) wird von der WSDL des Service definiert. Der Typ des Datenobjekts wird aus der Nachrichtendefinition in der WSDL abgeleitet. Das Datenobjekt hat eine Eigenschaft für jeden Abschnitt in der Nachrichtendefinition. Das Layout jedes Nachrichtenabschnitts richtet sich nach der Konvention für die Zuordnung von XML-Schemata zu SDO. Nähere Informationen finden Sie im Artikel Codebeispiel für Web-Services.
Web-Service-Fehlernachrichten
Wenn die Nachricht eine Fehlernachricht ist, wird das Feld "messageType" (im Knoten "Info" des Graphen) auf "fault" gesetzt, und der Nachrichtenhauptteil hat die folgenden Eigenschaften:
Eigenschaftsname | Eigenschaftstyp | Eigenschaftsbeschreibung |
---|---|---|
faultcode | javax.xml.namespace.QName | Enthält den faultcode-Wert aus dem SOAP-Element Fault. |
faultstring | java.lang.String | Enthält den faultstring-Wert aus dem SOAP-Element Fault. |
faultactor | java.lang.String | Enthält den faultactor-Wert aus dem SOAP-Element Fault. |
detail | commonj.sdo.DataObject | Enthält den Inhalt im unterordneten Element detail des Elements SOAPFault. |