In dieser Lektion richten Sie einen SQL Anywhere-Webserver ein, auf dem SOAP- und DISH-Webdienste ausgeführt werden und der die Anforderungen der JAX-WS-Clientanwendung verarbeitet.
Starten Sie die SQL Anywhere-Datenbank demo mit dem folgenden Befehl:
dbsrv12 -xs http(port=8082) "%SQLANYSAMP12%\demo.db" |
Dieser Befehl gibt an, dass der HTTP-Webserver an Port 8082 auf Anforderungen warten soll. Verwenden Sie eine andere Portnummer, wenn die Verwendung von 8082 in Ihrem Netzwerk nicht zulässig ist.
Stellen Sie in Interactive SQL mit dem folgenden Befehl eine Verbindung zum Datenbankserver her:
dbisql -c "UID=DBA;PWD=sql;SERVER=demo" |
Erstellen Sie eine gespeicherte Prozedur, die die Spalten der Tabelle Employees auflistet.
Führen Sie hierzu die folgende SQL-Anweisung in Interactive SQL aus:
CREATE PROCEDURE ListEmployees() RESULT ( EmployeeID INTEGER, Surname CHAR(20), GivenName CHAR(20), StartDate DATE, TerminationDate DATE ) BEGIN SELECT EmployeeID, Surname, GivenName, StartDate, TerminationDate FROM Employees; END; |
Diese Anweisungen erstellen eine neue Prozedur mit dem Namen ListEmployees, die die Struktur der Ausgabe der Ergebnismenge definiert und bestimmte Spalten der Tabelle "Employees" auswählt.
Erstellen Sie einen neuen SOAP-Dienst zum Annehmen der eingehenden Anforderungen.
Führen Sie die folgende SQL-Anweisung in Interactive SQL aus:
CREATE SERVICE "WS/EmployeeList" TYPE 'SOAP' FORMAT 'CONCRETE' EXPLICIT ON DATATYPE ON AUTHORIZATION OFF SECURE OFF USER DBA AS CALL ListEmployees(); |
Diese Anweisung erstellt einen neuen SOAP-Dienst mit dem Namen WS/EmployeeList, der als Ausgabe einen SOAP-Typ generiert. Es ruft die Prozedur ListEmployees auf, wenn ein Webclient eine Anforderung an den Dienst sendet.
SOAP-Webdienste, auf die von JAX-WS aus zugegriffen wird, sollten mit der FORMAT 'CONCRETE'-Klausel deklariert werden. Die EXPLICIT ON-Klausel gibt an, dass der entsprechende DISH-Dienst ein XML-Schema generieren soll, das ein explizites DataSet-Objekt basierend auf der Ergebnismenge der Prozedur ListEmployees beschreibt. Die EXPLICIT-Klausel wirkt sich nur auf das generierte WSDL-Dokument aus. Weitere Informationen zur EXPLICIT-Klausel finden Sie unter CREATE PROCEDURE-Anweisung [Webdienste].
DATATYPE ON gibt an, dass explizite Datentypinformationen in der zurückgegebenen XML-Ergebnismenge und den Eingabeparametern generiert werden. Diese Option wirkt sich nicht auf das WSDL-Dokument aus, das generiert wird. Weitere Informationen zur DATATYPE-Klausel finden Sie unter CREATE PROCEDURE-Anweisung [Webdienste].
Erstellen Sie einen neuen DISH-Dienst, der als Proxy für den SOAP-Dienst agiert und das WSDL-Dokument generiert.
Führen Sie die folgende SQL-Anweisung in Interactive SQL aus:
CREATE SERVICE "WSDish" TYPE 'DISH' FORMAT 'CONCRETE' GROUP "WS" AUTHORIZATION OFF SECURE OFF USER DBA; |
DISH-Webdienste, auf die von JAX-WS aus zugegriffen wird, sollten mit der FORMAT 'CONCRETE'-Klausel deklariert werden. Die GROUP-Klausel kennzeichnet die SOAP-Dienste, die vom DISH-Dienst verarbeitet werden sollen. Der im vorherigen Schritt erstellte EmployeeList-Dienst ist Teil der GROUP WS, da er als WS/EmployeeList deklariert ist.
Vergewissern Sie sich, dass der DISH-Webdienst funktionsfähig ist, indem Sie über einen Webbrowser darauf zugreifen.
Öffnen Sie Ihren Webbrowser und gehen Sie zu http://localhost:8082/demo/WSDish.
Der DISH-Dienst generiert automatisch ein WSDL-Dokument, das im Browser-Fenster angezeigt wird. Überprüfen Sie das Objekt EmployeeListDataset, das der folgenden Ausgabe ähnelt:
<s:complexType name="EmployeeListDataset">
<s:sequence>
<s:element name="rowset">
<s:complexType>
<s:sequence>
<s:element name="row" minOccurs="0" maxOccurs="unbounded">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="EmployeeID"
nillable="true" type="s:int" />
<s:element minOccurs="0" maxOccurs="1" name="Surname"
nillable="true" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="GivenName"
nillable="true" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="StartDate"
nillable="true" type="s:date" />
<s:element minOccurs="0" maxOccurs="1" name="TerminationDate"
nillable="true" type="s:date" />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType> |
EmployeeListDataset ist das explizite Objekt, das durch die Klauseln FORMAT 'CONCRETE' und EXPLICIT ON im SOAP-Dienst EmployeeList generiert wird. In einem späteren Schritt verwendet die wsimport-Anwendung diese Informationen, um eine SOAP 1.1-Clientschnittstelle für diesen Dienst zu generieren.
(Optional) Setzen Sie die Beispieldatenbank (demo.db) in ihren ursprünglichen Zustand zurück. Siehe Neuerstellung der Beispieldatenbank (demo.db).
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |