• Keine Ergebnisse gefunden

Prinzipieller Aufbau von WSDL-Beschreibungen

N/A
N/A
Protected

Academic year: 2022

Aktie "Prinzipieller Aufbau von WSDL-Beschreibungen"

Copied!
11
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

© Klaus Schild, 2004 1

WSDL WSDL

© Klaus Schild, 2004 2

Heutige Vorlesung Heutige Vorlesung

ƒ

Prinzipieller Aufbau von WSDL-Beschreibungen

ƒ

Beschreibung von Protokoll-Bindungen in WSDL

ƒ

Vor- und Nachteile von WSDL

Lernziel

Lernziel

ƒ

Google-WSDL lesen und erweitern können

© Klaus Schild, 2004 3

Wozu WSDL?

Wozu WSDL?

ƒ

Client möchte bestimmten Web-Dienst abrufen

ƒ

Client benötigt hierfür Beschreibung der Schnittstelle:

ƒ

Struktur des Aufrufes: Name, Eingangsparameter, Ergebnis

ƒ

Protokoll und Adresse

ƒ

ähnlich wie Java-IDL, jedoch unabhängig von Plattformen, Programmiersprachen und Protokollen

Nachfrager Anbieter

Schnittstelle Dienst publizieren Dienst abrufen

© Klaus Schild, 2004 4

Wie wird WSDL verwendet?

Wie wird WSDL verwendet?

ƒ

aus WSDL-Beschreibung können automatisch Stubs generiert werden

ƒ

Stubs abstrahieren von WSDL, SOAP und Protokoll

ƒ

erleichtert Einbindung des Dienstes zur Entwicklungszeit erheblich

ƒ

theoretisch damit auch dynamische Einbindung zur Laufzeit möglich

Nachfrager Anbieter

Schnittstelle Dienst publizieren Dienst abrufen

© Klaus Schild, 2004 5

W

Web eb S Services ervices D Description escription L Language anguage

ƒ

XML-Standard

ƒ

beschreibt Netzwerkdienste als Kommunikationsendpunkte (Ports), die bestimmte Nachrichten austauschen

ƒ nicht

auf SOAP-Nachrichten beschränkt

ƒ

aktuelle Version 1.1 (2001)

ƒ kein offizieller W3C-Standard,

sondern W3C-Note von IBM/Microsoft)

Operationen

doGoogleSearch SOAP-Anfrage SOAP-Antwort

Web-Adresse http://api.google.com/search

/beta2

Web-Dienst

© Klaus Schild, 2004 6

Abstrakte vs. konkrete Syntax Abstrakte vs. konkrete Syntax

abstrakte Syntax abstrakte Syntax

ƒ

unabhängig von Nachrichtenformaten und Protokollen

konkrete Syntax konkrete Syntax

(Binding

Binding)

ƒ

Abbildung einer abstrakten Syntax auf konkrete Nachrichtenformate (wie SOAP) und Protokolle (wie http)

ƒ

verschiedene Realisierungen einer abstrakten Syntax möglich

abstrakte Syntax

Operation

Anfrage Antwort

konkrete Syntax

Operation SOAP-Anfrage SOAP-Antwort

(2)

© Klaus Schild, 2004 7

Abstrakte und konkrete Schnittstelle Abstrakte und konkrete Schnittstelle

ƒƒ abstrakte Schnittstelleabstrakte Schnittstelle

(Port

Port Type

Type): Menge von

abstrakten Operationen

ƒ

ƒ konkrete Schnittstellekonkrete Schnittstelle

(Binding

Binding): Abbildung auf

konkrete Protokolle und Nachrichtenformate

ƒ

Dienst kann verschiedene Realisierungen haben:

z.B. SOAP/HTTP- und SOAP-SMTP-Bindung Web-Dienst

abstrakte Schnittstelle Operation

Anfrage Antwort

konkrete Schnittstelle Operation SOAP-Anfrage SOAP-Antwort

Web-Adresse

© Klaus Schild, 2004 8

Port Port

Web-Dienst

abstrakte Schnittstelle

Operation Anfrage Antwort

konkrete Schnittstelle Operation SOAP-Anfrage SOAP-Antwort

Web-Adresse

PortPort

= konkrete Schnittstelle + Web-Adresse

ƒ

ƒ WebWeb--DienstDienst

(Service

Service):

besteht aus mindestens einem

Kommunikationsendpunkt (Port)

© Klaus Schild, 2004 9

Die WSDL-Beschreibung von

abstrakte Syntax abstrakte Syntax

Web-Adresse Web-Adresse konkrete Manifestation in SOAP konkrete Manifestation in SOAP

© Klaus Schild, 2004 10

Grundstruktur Grundstruktur

Ports Ports Bindings

Bindings PortTypes

PortTypes Operations

Operations

SOAP/HTTP

SOAP/SMTP GoogleSearch

Port doGoogleSearch

doSpellingSuggestion doGetCachedPage

Service Service

http://…

http://…

mailto:

© Klaus Schild, 2004 11

XML XML- -Syntax Syntax

<?xml version="1.0"?>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

…</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

<?xml version="1.0"?>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

…</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

© Klaus Schild, 2004 12

XML XML- -Syntax Syntax

<?xml version="1.0"?>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

…</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

<?xml version="1.0"?>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

…</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

ƒ definitions: Wurzel-Element

ƒ types: Definition von Datentyp

(normalerweise mit XML-Schema)

ƒ portType: abstrakte Schnittstelle, d.h. Menge

von Operationen, die abstrakte Nachrichten austauschen

ƒ message: abstrakte Nachricht

ƒ binding: Abbildung eines portTypes

auf konkrete Protokolle und Nachrichtenformate

ƒ service: Menge von ports (jeweils binding

+ Web-Adresse)

ƒ

ƒ definitionsdefinitions: Wurzel-Element

ƒ

ƒ typestypes: Definition von Datentyp

(normalerweise mit XML-Schema)

ƒƒ portTypeportType: abstrakte Schnittstelle, d.h. Menge

von Operationen, die abstrakte Nachrichten austauschen

ƒ

ƒ messagemessage: abstrakte Nachricht

ƒ

ƒ bindingbinding: Abbildung eines portTypes

auf konkrete Protokolle und Nachrichtenformate

ƒ

ƒ serviceservice: Menge von ports (jeweils binding

+

Web-Adresse)

(3)

© Klaus Schild, 2004 13

Dokumentwurzel Dokumentwurzel

<?xml version="1.0"?>

<definitions name="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

….

</definitions>

<?xml version="1.0"?>

<definitions name="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

….

</definitions>

ƒ

Wurzel-Element immer definitions aus dem Namensraum für WSD (kein W3C-Namensraum)

ƒ

WSDL-Beschreibung kann Namen haben.

ƒ

WSDL-Beschreibung kann eigenen Ziel-Namensraum definieren.

© Klaus Schild, 2004 14

Datentypen Datentypen

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

© Klaus Schild, 2004 15

Datentypen Datentypen

<types>

<schemaxmlns="http://www.w3.org/2001/XMLSchema"

targetNamespace="urn:GoogleSearch">

</schema>

</types>

<types>

<schemaxmlns="http://www.w3.org/2001/XMLSchema"

targetNamespace="urn:GoogleSearch">

</schema>

</types>

ƒ

Datentypen, die beim Austausch von Nachrichten relevant sind

ƒ

Verwendung von XML-Schema empfohlen, jedes andere Typsystem aber auch erlaubt

ƒ

Beachte: XML-Schema kann auch verwendet werden, wenn die Nachrichten nicht in XML übertragen werden.

© Klaus Schild, 2004 16

Datentyp für

Datentyp für -Suchresultat - Suchresultat

<types>

<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:typens="urn:GoogleSearch"

targetNamespace="urn:GoogleSearch">

<xsd:complexType name="GoogleSearchResult">

<xsd:all>

<xsd:element name="estimatedTotalResultsCount" type="xsd:int"/>

<xsd:element name="resultElements" type="typens:ResultElementArray"/>

<xsd:element name="searchQuery" type="xsd:string"/>

<xsd:element name="startIndex" type="xsd:int"/>

<xsd:element name="endIndex" type="xsd:int"/>

</xsd:all>

</xsd:complexType>

</schema>

</types>

<types>

<xsd:schemaxmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:typens="urn:GoogleSearch"

targetNamespace="urn:GoogleSearch">

<xsd:complexType name="GoogleSearchResult">

<xsd:all>

<xsd:element name="estimatedTotalResultsCount" type="xsd:int"/>

<xsd:element name="resultElements" type="typens:ResultElementArray"/>

<xsd:element name="searchQuery" type="xsd:string"/>

<xsd:element name="startIndex" type="xsd:int"/>

<xsd:element name="endIndex" type="xsd:int"/>

</xsd:all>

</xsd:complexType>

</schema>

</types>

ƒ komplettes XML-Schema

ƒ Ziel-Namensraum (normalerweise identisch mit Ziel-Namensraum von WSDL)

ƒ komplettes XML-Schema

ƒ Ziel-Namensraum (normalerweise identisch mit Ziel-Namensraum von WSDL)

© Klaus Schild, 2004 17

Abstrakte Nachrichten

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

ƒ abstrakte Nachrichten, vom Web- Dienst empfangen oder gesendet

ƒ abstrakte Nachrichten, vom Web- Dienst empfangen oder gesendet

© Klaus Schild, 2004 18

Abstrakte Nachrichten Abstrakte Nachrichten

<message name="doGoogleSearchResponse">

<partname="return" type="typens:GoogleSearchResult"/>

</message>

<message name="doGoogleSearchResponse">

<partname="return" type="typens:GoogleSearchResult"/>

</message>

ƒ

definiert abstrakte Nachricht mit Namen (Referenz)

ƒ

Definitionen werden in portType oder binding verwendet

ƒ

können verschiedene logische Bestandteile (part

part)

haben, z.B.:

Parameter eines entfernten Prozeduraufrufs

ƒ

jedes dieser Bestandteile hat ebenfalls einen Namen

ƒ

Reihenfolge der logischen Bestandteile unerheblich

(4)

© Klaus Schild, 2004 19

Nachrichten mit strukturiertem Inhalt Nachrichten mit strukturiertem Inhalt

<message name="doGoogleSearchResponse">

<partname="return" type="typens:complexType"/>

</message>

<message name="doGoogleSearchResponse">

<partname="return" type="typens:complexType"/>

</message>

zwei unterschiedliche Modellierungen

1.

nur ein Bestandteil (part), diesem wird komplexer Datentyp zugeordnet:

<message name="doGoogleSearchResponse">

<partname="param1" element="typens:param1"/>

<partname="param2" element="typens:param2"/>

</message>

<message name="doGoogleSearchResponse">

<partname="param1" element="typens:param1"/>

<partname="param2" element="typens:param2"/>

</message>

typens:complexType könnte z.B. 2 Parameter enthalten

2. mehre

Bestandteile (parts), denen jeweils ein Element

aus types zugeordnet wird:

© Klaus Schild, 2004 20

Wie abstrakt ist eine abstrakte Nachricht?

Wie abstrakt ist eine abstrakte Nachricht?

ƒ

message beschreibt abstrakte Syntax

ƒ

Konkrete Schnittstelle (binding) bildet abstrakte Syntax auf bestimmte Protokolle und Nachrichtenformate ab.

ƒ

Dennoch kann abstrakte Nachricht einer konkreten Realisierung (binding) sehr ähnlich sein.

Wie

abstrakt

eine abstrakte Syntax ist, zeigt also erst die konkrete Schnittstelle (binding).

Wie

abstrakt

eine abstrakte Syntax ist, zeigt also erst die konkrete Schnittstelle (binding).

© Klaus Schild, 2004 21

Abstrakte Schnittstelle Abstrakte Schnittstelle

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

© Klaus Schild, 2004 22

Abstrakte Schnittstelle Abstrakte Schnittstelle

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portType name="GoogleSearchPort">

<operationname="doGoogleSearch">

<input message="typens:doGoogleSearch"/>

<output message="typens:doGoogleSearchResponse"/>

</operation>

</portType>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portType name="GoogleSearchPort">

<operationname="doGoogleSearch">

<input message="typens:doGoogleSearch"/>

<output message="typens:doGoogleSearchResponse"/>

</operation>

</portType>

ƒ

definiert abstrakte Schnittstelle als Menge von abstrakten Operationen (operations)

ƒ

Definition wird in binding verwendet

© Klaus Schild, 2004 23

Abstrakte Schnittstelle Abstrakte Schnittstelle

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">

<operation name="doGoogleSearch">

<input message="typens:doGoogleSearch"/>

<output message="typens:doGoogleSearchResponse"/>

</operation>

</portType>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">

<operation name="doGoogleSearch">

<input message="typens:doGoogleSearch"/>

<output message="typens:doGoogleSearchResponse"/>

</operation>

</portType>

ƒ

ƒ operationoperation: definiert einfaches Interaktionsmuster mit

Eingangs- und Ausgangs-Nachrichten.

ƒ

Definition wird in binding verwendet

ƒ

verwendet keine Datentypen, sondern Nachrichten

© Klaus Schild, 2004 24

Beispiel

GoogleSearchPort

= 3 Operationen

GoogleSearchPort = 3 Operationen

typens:doGoogleSearch

= message

typens:doGoogleSearch = message

typens:GoogleSearchResponse

= message

typens:GoogleSearchResponse = message

(5)

© Klaus Schild, 2004 25

Mögliche Interaktionsmuster Mögliche Interaktionsmuster

<operationname="…">

<inputmessage="…"/>

</operation>

<operationname="…">

<inputmessage="…"/>

</operation>

Einweg (one way, fire

and forget)

Anfrage-Antwort (request-response)

Benachrichtigung (notification)

Benachrichtigung-Antwort (notification-response)

<operationname="…">

<inputmessage="…"/>

<outputmessage="…"/>

</operation>

<operationname="…">

<inputmessage="…"/>

<outputmessage="…"/>

</operation>

<operationname="…">

<outputmessage="…"/>

</operation>

<operationname="…">

<outputmessage="…"/>

</operation>

<operationname="…">

<outputmessage="…"/>

<inputmessage="…"/>

</operation>

<operationname="…">

<outputmessage="…"/>

<inputmessage="…"/>

</operation>

© Klaus Schild, 2004 26

Abstrakte Interaktionsmuster Abstrakte Interaktionsmuster

ƒ

Anfrage-Antwort-Muster müssen nicht mit einer Netzwerkkommunikation (z.B. HTTP request/response) realisiert werden.

ƒ

auch Realisierung z.B. mit zwei unabhängigen Kommunikationen (z.B. E-Mails) möglich

ƒ

entfernter Prozeduraufruf daher auch mit SMTP realisierbar

ƒ

Realisierung wird erst in der konkreten Schnittstelle (binding) festgelegt

© Klaus Schild, 2004 27

Komplexe Interaktionsmuster Komplexe Interaktionsmuster

Î

Registrierung zum Börsenticker

Í

Bestätigung der Registrierung

Í

aktueller Börsenkurs (Benachrichtigung)

Client Server

<operationname="…">

<inputmessage="…"/>

<outputmessage="…"/>

<outputmessage="…"/>

</operation>

<operationname="…">

<inputmessage="…"/>

<outputmessage="…"/>

<outputmessage="…"/>

</operation>

In WSDL

nicht

In WSDL erlaubt!

nicht

erlaubt!

© Klaus Schild, 2004 28

Entfernte Prozeduraufrufe Entfernte Prozeduraufrufe

ƒ

Reihenfolge der Bestandteile (parts) unerheblich

ƒ

bei entfernten Prozeduraufrufen Reihenfolge der Input- Parameter (parts) aber häufig wichtig

ƒ

Reihenfolge kann mit parameterOrder festgelegt werden.

ƒ

zusätzliche Konvention: In/Out-Parameter erscheinen sowohl in input- als auch in output-Nachricht.

<operationname="doGoogleSearch" parameterOrder="key q start …">

<inputmessage="typens:doGoogleSearch"/>

<outputmessage="typens:doGoogleSearchResponse"/>

</operation>

<operationname="doGoogleSearch" parameterOrder="key q start …">

<inputmessage="typens:doGoogleSearch"/>

<outputmessage="typens:doGoogleSearchResponse"/>

</operation>

© Klaus Schild, 2004 29

Fehlermeldungen Fehlermeldungen

Client

Client ServerServer

<operationname="…">

<inputmessage="…"/>

<outputmessage="…"/>

<faultmessage="…"/>

</operation>

<operationname="…">

<inputmessage="…"/>

<outputmessage="…"/>

<faultmessage="…"/>

</operation>

<operationname="…">

<outputmessage="…"/>

<inputmessage="…"/>

<faultmessage="…"/>

</operation>

<operationname="…">

<outputmessage="…"/>

<inputmessage="…"/>

<faultmessage="…"/>

</operation>

ƒ

Statt Antwort kann auch Fehler auf Anwendungsebene gemeldet werden.

ƒ

nur eine Fehlermeldung: kann aber komplexen Datentyp mit unterschiedlichen Fehlertypen (xsd:choice) haben.

Anfrage-Antwort Benachrichtigung-Antwort

Client

Client ServerServer

© Klaus Schild, 2004 30

Konkrete

Konkrete Schnittstelle Schnittstelle

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

(6)

© Klaus Schild, 2004 31

Konkrete Schnittstelle Konkrete Schnittstelle

abstrakte Syntax

Operation

Anfrage Antwort

konkrete Syntax

Operation SOAP-Anfrage SOAP-Antwort

ƒ

ƒ konkrete Schnittstellekonkrete Schnittstelle

(Binding

Binding): Abbildung einer

abstrakten Schnittstelle (portType) auf konkrete Nachrichtenformate und Protokolle

ƒ

jede abstrakte Operation des PortType wird abgebildet

ƒ

für ein PortType

verschiedene Abbildungen (Bindings) möglich

© Klaus Schild, 2004 32

Konkrete Schnittstelle Konkrete Schnittstelle

<binding name="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement

<operation name="doGoogleSearch">

Erweiterungselement

<input>

Erweiterungselement

</input>

<output>

Erweiterungselement

</output>

</operation>

</binding>

<binding name="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement

<operation name="doGoogleSearch">

Erweiterungselement

<input>

Erweiterungselement

</input>

<output>

Erweiterungselement

</output>

</operation>

</binding>

ƒ

definiert konkrete Schnittstelle

ƒ

Definition wird in service benutzt

ƒ type: die abgebildete abstrakte

Schnittstelle (portType)

ƒ

mehrere binding-Elemente für eine abstrakte Schnittstelle erlaubt

ƒ

definiert konkrete Schnittstelle

ƒ

Definition wird in service benutzt

ƒ

type: die abgebildete abstrakte Schnittstelle (portType)

ƒ

mehrere binding-Elemente für eine abstrakte Schnittstelle erlaubt

© Klaus Schild, 2004 33

Erweiterungselemente Erweiterungselemente

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement

<operation name="doGoogleSearch">

Erweiterungselement

<input>

Erweiterungselement

</input>

<output>

Erweiterungselement

</output>

</operation>

</binding>

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement

<operation name="doGoogleSearch">

Erweiterungselement

<input>

Erweiterungselement

</input>

<output>

Erweiterungselement

</output>

</operation>

</binding>

ƒ

Abbildung mit sog.

Erweiterungselementen kodiert

ƒ

Informationen über die Abbildung auf allen Ebenen:

ƒ Binding selbst

ƒ Operation

ƒ Input- und Output-Nachricht

ƒ Fehlermeldung

ƒ

Abbildung mit sog.

Erweiterungselementen kodiert

ƒ

Informationen über die Abbildung auf allen Ebenen:

ƒ Binding selbst

ƒ Operation

ƒ Input- und Output-Nachricht

ƒ Fehlermeldung

© Klaus Schild, 2004 34

Erweiterungselemente Erweiterungselemente

ƒ

engl. extensibility elements

ƒ

Platzhalter für spezielle Bindings

ƒ

also Platzhalter in der WSDL-Grammatik für entsprechende Erweiterungen

ƒ

WSDL 1.1 definiert drei Bindings:

ƒ

SOAP-Binding

ƒ

HTTP-Binding

ƒ

MIME-Binding

werden gleich vorgestellt, vorher noch letzten Teil einer WSDL-Beschreibung werden gleich vorgestellt, vorher noch letzten Teil einer WSDL-Beschreibung

© Klaus Schild, 2004 35

Web

Web- -Dienst (Service) Dienst (Service)

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

© Klaus Schild, 2004 36

Web

Web- -Dienst (Service) Dienst (Service)

<servicename="GoogleSearchService">

<portname="GoogleSearchPort" binding="typens:GoogleSearchBinding">

Erweiterungselement (Web-Adresse)

</port>

</service>

<servicename="GoogleSearchService">

<portname="GoogleSearchPort" binding="typens:GoogleSearchBinding">

Erweiterungselement (Web-Adresse)

</port>

</service>

ƒ

Web-Dienst = Menge von Kommunikationsendpunkten (Ports)

ƒ

mehrere service-Elemente erlaubt, falls unterschiedliche Web-Dienste angeboten werden, z.B.:

GoogleSearchService und GoogleClassificationService

(7)

© Klaus Schild, 2004 37

Kommunikationsendpunkt Kommunikationsendpunkt

<portname="GoogleSearchPort" binding="typens:GoogleSearchBinding">

Erweiterungselement (Web-Adresse)

</port>

<portname="GoogleSearchPort" binding="typens:GoogleSearchBinding">

Erweiterungselement (Web-Adresse)

</port>

ƒ

definiert einen benannten Kommunikationsendpunkt:

Binding + genau eine Web-Adresse

ƒ

Web-Adresse mit einem Erweiterungselement spezifiziert, z.B.:

<portname="GoogleSearchPort" binding="typens:GoogleSearchBinding">

<soap:address location="http://api.google.com/search/beta2"/>

</port>

<portname="GoogleSearchPort" binding="typens:GoogleSearchBinding">

<soap:address location="http://api.google.com/search/beta2"/>

</port>

© Klaus Schild, 2004 38

Welche Ports bilden einen Service?

Welche Ports bilden einen Service?

<servicename="GoogleSearchService">

<port…>…</port>

<port...>…</port>

</service>

<servicename="GoogleClassificationService">

<port…>…</port>

</service>

<servicename="GoogleSearchService">

<port…>…</port>

<port...>…</port>

</service>

<servicename="GoogleClassificationService">

<port…>…</port>

</service>

Ports eines Web-Dienstes (service)

ƒ

kommunizieren nicht untereinander

ƒ

Ports mit derselben abstrakten Schnittstelle, aber versch. Bindings oder Web-Adressen:

semantisch äquivalente Alternativen

© Klaus Schild, 2004 39

Grundstruktur Grundstruktur

Ports Ports Bindings

Bindings PortTypes

PortTypes Operations

Operations

SOAP/HTTP

SOAP/SMTP GoogleSearch

Port doGoogleSearch

doSpellingSuggestion doGetCachedPage

Service Service

http://…

http://…

mailto:

© Klaus Schild, 2004 40

SOAP- SOAP -Binding Binding

© Klaus Schild, 2004 41

SOAP

SOAP- -Bindung Bindung von WSDL von WSDL

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

<definitionsname="GoogleSearch"

targetNamespace="urn:GoogleSearch"

xmlns="http://schemas.xmlsoap.org/wsdl/">

<types>…</types>

<messagename="doGoogleSearch">…</message>

<messagename="doGoogleSearchResponse">…</message>

<portTypename="GoogleSearchPort">…</portType>

<bindingname="GoogleSearchBinding"

type="typens:GoogleSearchPort">

</binding>

<servicename="GoogleSearchService">…</service>

</definitions>

© Klaus Schild, 2004 42

SOAP

SOAP- -Bindung Bindung: Erweiterungselemente : Erweiterungselemente

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement soap:binding

<operation name="doGoogleSearch">

Erweiterungselement soap:operation

<input>

Erweiterungselemente soap:bodyundsoap:header

</input>

<output>

Erweiterungselement soap:bodyundsoap:header

</output>

<fault>

Erweiterungselement soap:fault

</fault>

</operation>

</binding>

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement soap:binding

<operation name="doGoogleSearch">

Erweiterungselement soap:operation

<input>

Erweiterungselemente soap:bodyundsoap:header

</input>

<output>

Erweiterungselement soap:bodyundsoap:header

</output>

<fault>

Erweiterungselement soap:fault

</fault>

</operation>

</binding>

ƒ

Erweiterungselemente beschreiben Abbildung auf SOAP-Nachricht

ƒ

Beachte: WSDL 1.0 benutzt SOAP 1.1

ƒ

Erweiterungselemente beschreiben Abbildung auf SOAP-Nachricht

ƒ

Beachte: WSDL 1.0 benutzt SOAP 1.1

(8)

© Klaus Schild, 2004 43

soap:binding soap:binding

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement soap:binding

<operation name="doGoogleSearch">

Erweiterungselement soap:operation

<input>

Erweiterungselemente soap:bodyundsoap:header

</input>

<output>

Erweiterungselement soap:bodyundsoap:header

</output>

<fault>

Erweiterungselement soap:fault

</fault>

</operation>

</binding>

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement soap:binding

<operation name="doGoogleSearch">

Erweiterungselement soap:operation

<input>

Erweiterungselemente soap:bodyundsoap:header

</input>

<output>

Erweiterungselement soap:bodyundsoap:header

</output>

<fault>

Erweiterungselement soap:fault

</fault>

</operation>

</binding>

© Klaus Schild, 2004 44

soap:binding soap:binding

<binding name="GoogleSearchBinding" type="typens:GoogleSearchPort">

<soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

<operation name="doGoogleSearch">

</operation>

</binding>

<binding name="GoogleSearchBinding" type="typens:GoogleSearchPort">

<soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

<operation name="doGoogleSearch">

</operation>

</binding>

ƒ

ƒ soap:bindingsoap:binding: besagt, dass portType

mit SOAP realisiert wird

ƒƒ transporttransport: wie SOAP-Nachrichten übertragen werden

ƒ

Beachte: HTTP meint hier HTTP-POST

ƒ

auch möglich: transport="http://schemas.xmlsoap.org/soap/smtp"

ƒ

ƒ stylestyle: entfernte Prozeduraufrufe (rpc) oder Messaging

(document)

© Klaus Schild, 2004 45

SOAP SOAP- -Stile Stile

ƒ

legt Struktur des SOAP-Nachrichteninhalts (body) fest, darüber hinaus keine Bedeutung

ƒ

SOAP-Stil in soap:binding gilt für alle Operationen, kann aber in jeder einzelnen Operation überschrieben werden.

<body>

<procedure-name>

<part-1>…<part-1>

<part-n>…<part-n>

</procedure-name>

</body>

<body>

<procedure-name>

<part-1>…<part-1>

<part-n>…<part-n>

</procedure-name>

</body>

style="rpc style="rpc""

<body>

<part-1>…<part-1>

<part-n>…<part-n>

</body>

<body>

<part-1>…<part-1>

<part-n>…<part-n>

</body>

style="document style="document""

© Klaus Schild, 2004 46

soap:body

soap:body und und soap:header soap:header

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement soap:binding

<operation name="doGoogleSearch">

Erweiterungselement soap:operation

<input>

Erweiterungselemente soap:bodyundsoap:header

</input>

<output>

Erweiterungselement soap:bodyundsoap:header

</output>

<fault>

Erweiterungselement soap:fault

</fault>

</operation>

</binding>

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement soap:binding

<operation name="doGoogleSearch">

Erweiterungselement soap:operation

<input>

Erweiterungselemente soap:bodyundsoap:header

</input>

<output>

Erweiterungselement soap:bodyundsoap:header

</output>

<fault>

Erweiterungselement soap:fault

</fault>

</operation>

</binding>

© Klaus Schild, 2004 47

soap:body soap:body

ƒ

ƒ soap:body: Abbildung einer abstrakten input- oder output-soap:body

Nachricht auf den SOAP-Nachrichteninhalt (body)

ƒƒ use="literal"use="literal": Abstrakte Nachricht wird unverändert

übernommen

<operation name="doGoogleSearch">

<soap:operation soapAction="urn:GoogleSearchAction"/>

<input>

<soap:body use="literal"/>

</input>

<output>…</output>

</operation>

<operation name="doGoogleSearch">

<soap:operation soapAction="urn:GoogleSearchAction"/>

<input>

<soap:body use="literal"/>

</input>

<output>…</output>

</operation>

Komplette

input-Nachricht wird unverändert

in SOAP-Body übernommen.

Komplette input-Nachricht wird unverändert in SOAP-Body übernommen.

© Klaus Schild, 2004 48

soap:body soap:body

<input>

<soap:body use="encoded"

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

</input>

<input>

<soap:body use="encoded"

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

</input>

ƒƒ use="encodeduse="encoded"": Abstrakte Nachricht wird mit Hilfe eines

bestimmten Verfahrens (encodingStyle) kodiert (wie in SOAP).

ƒ

Google verwendet Kodierungsverfahren von SOAP, z.B.

SOAP-Arrays für Suchresultate.

Komplette

input-Nachricht wird kodiert

in den SOAP-Body übernommen.

Komplette input-Nachricht wird kodiert in

den SOAP-Body übernommen.

(9)

© Klaus Schild, 2004 49

soap:header soap:header

ƒ

Teile der abstrakten Nachricht werden im SOAP- Briefkopf repräsentiert.

ƒ

Struktur von soap:header analog zu soap:body.

<operation name="doGoogleSearch">

<soap:operation soapAction="urn:GoogleSearchAction"/>

<input>

<soap:body parts="q start" use="encoded" …/>

<soap:header parts="key maxResults filter restrict …"

use="literal"/>

</input>

<output>…</output>

</operation>

<operation name="doGoogleSearch">

<soap:operation soapAction="urn:GoogleSearchAction"/>

<input>

<soap:body parts="q start" use="encoded" …/>

<soap:header parts="key maxResults filter restrict …"

use="literal"/>

</input>

<output>…</output>

</operation> input-Nachricht wird auf SOAP-

Header und -Body verteilt.

input-Nachricht wird auf SOAP- Header und -Body verteilt.

© Klaus Schild, 2004 50

soap:address soap:address

<portname="GoogleSearchPort" binding="typens:GoogleSearchBinding">

<soap:address location="http://api.google.com/search/beta2"/>

</port>

<portname="GoogleSearchPort" binding="typens:GoogleSearchBinding">

<soap:address location="http://api.google.com/search/beta2"/>

</port>

ƒ

Jeder Kommunikationsendpunkt muss genau eine Web- Adresse (soap:address) haben.

ƒ

Beachte: Die Web-Adresse muss zum Transportprotokoll des SOAP-Bindings passen.

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

<soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

</binding>

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

<soap:binding xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

</binding>

© Klaus Schild, 2004 51

HTTP HTTP -Binding - Binding

© Klaus Schild, 2004 52

SOAP über HTTP SOAP über HTTP

ƒ

Bindung für SOAP über HTTP haben wir bereits gesehen:

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

<soap:bindingxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

</binding>

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

<soap:bindingxmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>

</binding>

ƒ

hiermit wird SOAP über HTTP-POST-Schnittstelle realisiert

ƒ

es gibt aber auch Möglichkeit, eine HTTP-Schnittstelle zu definieren, die nicht SOAP verwendet

© Klaus Schild, 2004 53

HTTP

HTTP- -GET GET- -Anfrage Anfrage

ƒ

HTTP-GET-Anfrage kodiert alle Parameter des RPCs in der URL:

GET /search/beta2/doGoogleSearch?key=45675353&q=Anfrage&…

HTTP/1.1 Host: api.google.com

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

GET /search/beta2/doGoogleSearch?key=45675353&q=Anfrage&…

HTTP/1.1 Host: api.google.com

Content-Type: text/xml; charset="utf-8"

Content-Length: nnnn

Antwort als HTML-Dokument Antwort als HTML-Dokument

© Klaus Schild, 2004 54

HTTP

HTTP- -GET GET- -Binding Binding ohne SOAP ohne SOAP

<service name="GoogleSearchService">

<port name="GoogleSearchPort2"

binding="typens:GoogleSearchBinding2">

<http:addressxmlns:http="http://schemas.xmlsoap.org/wsdl/http/"

location="http://api.google.com/search/beta2"/>

</service>

<service name="GoogleSearchService">

<port name="GoogleSearchPort2"

binding="typens:GoogleSearchBinding2">

<http:addressxmlns:http="http://schemas.xmlsoap.org/wsdl/http/"

location="http://api.google.com/search/beta2"/>

</service>

<binding name="GoogleSearchBinding2" type="typens:GoogleSearchPort">

<http:binding verb="GET"/>

<operation name="doGoogleSearch">

<http:operation location="doGoogleSearch"/>

<input><http:urlEncoded/></input>

<output><mime:content part="docs" type="text/html"/></output>

</operation>

</binding>

<binding name="GoogleSearchBinding2" type="typens:GoogleSearchPort">

<http:binding verb="GET"/>

<operation name="doGoogleSearch">

<http:operation location="doGoogleSearch"/>

<input><http:urlEncoded/></input>

<output><mime:content part="docs" type="text/html"/></output>

</operation>

</binding>

relative Adresse

Browser-basiertes Google mit WSDL beschrieben Browser-basiertes Google mit

WSDL beschrieben

(10)

© Klaus Schild, 2004 55

Bewertung Bewertung

© Klaus Schild, 2004 56

Vorteile Vorteile

+

plattformunabhängiger XML-Standard

+

etabliert

+

Syntax der Schnittstelle kann genau festgelegt werden.

+

Unterschiedliche Realisierungen einer abstrakter Schnittstelle möglich

z.B. SOAP über HTTP und SMTP

© Klaus Schild, 2004 57

Nachteile Nachteile

-

verschiedene Protokoll-Bindungen (wie HTTP vs.

SMTP) können unterschiedliche Semantik haben

- keine

explizite Unterscheidung zwischen

synchron/asynchron

- keine

komplexen Interaktionsmuster

- keine qualitativen Aspekten (quality of service) - keine

Sicherheitsaspekte

© Klaus Schild, 2004 58

Wie geht es weiter?

Wie geht es weiter?

;

Prinzipieller Aufbau von WSDL-Beschreibungen

;

Protokoll-Bindungen in WSDL

;

Vor- und Nachteile von WSDL

;

Google-WSDL lesen und erweitern können

Heute 16:15

Heute 16:15

ƒ

Tutorium

Nächste Woche Nächste Woche

ƒ

Wie wird WSDL verwendet?

ƒ

Anforderungen aus der Praxis

© Klaus Schild, 2004 59

Anhang Anhang

© Klaus Schild, 2004 60

soap:operation soap:operation

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement soap:binding

<operation name="doGoogleSearch">

Erweiterungselement soap:operation

<input>

Erweiterungselemente soap:bodyundsoap:header

</input>

<output>

Erweiterungselement soap:bodyundsoap:header

</output>

<fault>

Erweiterungselement soap:fault

</fault>

</operation>

</binding>

<bindingname="GoogleSearchBinding" type="typens:GoogleSearchPort">

Erweiterungselement soap:binding

<operation name="doGoogleSearch">

Erweiterungselement soap:operation

<input>

Erweiterungselemente soap:bodyundsoap:header

</input>

<output>

Erweiterungselement soap:bodyundsoap:header

</output>

<fault>

Erweiterungselement soap:fault

</fault>

</operation>

</binding>

(11)

© Klaus Schild, 2004 61

soap:operation soap:operation

<operation name="doGoogleSearch">

<soap:operation soapAction="urn:GoogleSearchAction"/>

<input>…</input>

<output>…</output>

</operation>

<operation name="doGoogleSearch">

<soap:operation soapAction="urn:GoogleSearchAction"/>

<input>…</input>

<output>…</output>

</operation>

ƒ

soapAction: legt für Operation den SOAPAction-Briefkopf in der HTTP-Anfrage fest

ƒ

style: SOAP-Standard-Stil kann für die Operation

überschrieben werden.

Referenzen

ÄHNLICHE DOKUMENTE

Gast JC – Einstieg Klassen &amp; Objekte (OOPS, 17.11.2005) Seite 2..

Ein abstrakter Datentyp (ADT) besteht aus einem (oder mehreren) Typen und Operationen darauf, mit folgenden Eigenschaften:. I Werte des Typen können nur über die

Signatur: Typ und Operationen eines ADT Axiome: ¨ uber Typen formulierte Eigenschaften Spezifikation = Signatur + Axiome. Interface zwischen Implementierung und Nutzung Testen zur

Die Klauseln type ‚a T und type object sind in den obigen Beispielen erforderlich, denn anderenfalls würden sich die nachfolgenden Definitionen auf Typen ‚a T und object bezie- hen,

Wenn in einer &#34;Klasse&#34; KEINE Methode implementiert ist, wird sie als interface &#34;Schnittstelle&#34; bezeichnet. public interface

In einem letrec-Ausdruck können wir bei der Definition der Werte bereits Variablen verwenden, die erst später angelegt werden. == ⇒ Vor der eigentlichen Definition werden

Eine abstrakte Maschine ist eine idealisierte Hardware, für die sich einerseits.. “leicht” Code erzeugen lässt, die sich andererseits aber auch “leicht” auf realer

Ein Interface kann aufgefasst werden als eine abstrakte Klasse, wobei:.. • alle Objekt-Methoden