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.
Voraussetzungen
In dieser Lektion wird davon ausgegangen, dass Sie die Rollen und Privilegien haben, die im Abschnitt "Privilegien" am Anfang dieser praktischen Einführung aufgeführt sind: Praktische Einführung: Verwenden von JAX-WS für den Zugriff auf einen SOAP/DISH-Webdienst.
Kontext und Bemerkungen
In dieser Lektion wird der Webserver eingerichtet sowie ein einfacher Webdienst, den Sie in der nächsten Lektion verwenden werden. Es kann aufschlussreich sein, Proxy-Software zu verwenden, um das XML-Nachrichtenaufkommen zu beobachten. Der Proxy fügt sich zwischen Ihrer Clientanwendung und dem Webserver ein.
Starten Sie die SQL Anywhere-Demodatenbank mit dem folgenden Befehl:
dbsrv16 -xs http(port=8082) "%SQLANYSAMP16%\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 OR REPLACE 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. Der Dienst ruft die ListEmployees-Prozedur auf, wenn ein Webclient eine Anforderung an ihn sendet. Der Dienstname ist in Anführungszeichen gesetzt, weil darin ein Schrägstrich (/) vorkommt.
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.
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.
Wenn Sie sich mit einer anderen Benutzer-ID angemeldet haben, muss die USER DBA-Klausel gemäß Ihrer Benutzer-ID geändert werden.
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, weil er als WS/EmployeeList deklariert ist. Wenn Sie sich mit einer anderen Benutzer-ID angemeldet haben, muss die USER DBA-Klausel gemäß Ihrer Benutzer-ID geändert werden.
Vergewissern Sie sich, dass der DISH-Webdienst funktionsfähig ist, indem Sie über einen Webbrowser auf das zugehörige WSDL-Dokument zugreifen.
Öffnen Sie Ihren Webbrowser und gehen Sie zu http://localhost:8082/demo/WSDish.
Der DISH-Dienst generiert automatisch ein WSDL-Dokument, das im Browserfenster 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.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |