In dieser Lektion verarbeiten Sie das aus dem DISH-Dienst generierte WSDL-Dokument und erstellen eine Java-Anwendung für den Zugriff auf Tabellendaten, basierend auf dem im WSDL-Dokument definierten Schema.
Voraussetzungen
Diese Lektion hängt von den in Lektion 1 ausgeführten Schritten ab. Siehe Lektion 1: Einrichten eines Webservers für den Empfang von SOAP-Anforderungen und das Senden von SOAP-Antworten.
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
Zum Zeitpunkt des Erstellens dieser Dokumentation war JAX-WS in JDK 1.7.0 enthalten und die neueste Version von JAX-WS war
2.2.7. Die nachstehenden Schritte basieren auf dieser Version. Um zu ermitteln, ob JAX-WS in Ihrem JDK vorhanden ist, suchen
Sie nach der Anwendung wsimport im JDK-Verzeichnis bin. Wenn sie dort nicht vorhanden ist, gehen Sie zu http://jax-ws.java.net/, um die neueste Version von JAX-WS herunterzuladen und zu installieren.
Diese Lektion enthält mehrere Verweise auf localhost. Verwenden Sie statt localhost den Hostnamen oder die IP-Adresse des Webservers aus Lektion 1, wenn der Webclient nicht auf demselben Computer ausgeführt wird wie der Webserver.
Erstellen Sie an einer Eingabeaufforderung ein neues Arbeitsverzeichnis für Ihren Java-Code und die zugehörigen generierten Dateien. Wechseln Sie zu diesem neuen Verzeichnis.
Erstellen Sie mit dem folgenden Befehl die Schnittstelle, die den DISH-Webdienst aufruft und das WSDL-Dokument erstellt:
wsimport -keep "http://localhost:8082/demo/WSDish" |
Die Anwendung wsimport ruft das WSDL-Dokument von der angegebenen URL ab. Sie generiert .java Dateien, um dafür eine Schnittstelle zu erstellen, und kompiliert sie dann in .class-Dateien.
Die Option keep gibt an, dass die .java-Dateien nach dem Generieren der Klassendateien nicht gelöscht werden sollen. Der generierte Java-Quellcode ermöglicht es Ihnen, die generierten Klassendateien zu verstehen.
Die Anwendung wsimport erstellt in Ihrem aktuellen Arbeitsverzeichnis eine neue Unterverzeichnisstruktur namens localhost\_8082\demo\ws. Im Folgenden finden Sie eine Liste der Inhalte im Verzeichnis ws:
EmployeeList.class
EmployeeList.java
EmployeeListDataset$Rowset$Row.class
EmployeeListDataset$Rowset.class
EmployeeListDataset.class
EmployeeListDataset.java
EmployeeListResponse.class
EmployeeListResponse.java
FaultMessage.class
FaultMessage.java
ObjectFactory.class
ObjectFactory.java
package-info.class
package-info.java
WSDish.class
WSDish.java
WSDishSoapPort.class
WSDishSoapPort.java
Schreiben Sie eine Java-Anwendung, die anhand des im generierten Quellcode definierten DataSet-Objektschemas auf Tabellendaten vom Datenbankserver zugreift.
Im Folgenden finden Sie ein Beispiel einer Java-Anwendung, die dies ausführt. Speichern Sie den Quellcode als Datei SASoapDemo.java im aktuellen Arbeitsverzeichnis. Ihr aktuelles Arbeitsverzeichnis muss das Verzeichnis sein, das das Unterverzeichnis localhost enthält.
// SASoapDemo.java illustrates a web service client that // calls the WSDish service and prints out the data. import java.util.*; import javax.xml.ws.*; import org.w3c.dom.Element; import org.w3c.dom.Node; import javax.xml.datatype.*; import localhost._8082.demo.ws.*; public class SASoapDemo { public static void main( String[] args ) { try { WSDish service = new WSDish(); Holder<EmployeeListDataset> response = new Holder<EmployeeListDataset>(); Holder<Integer> sqlcode = new Holder<Integer>(); WSDishSoapPort port = service.getWSDishSoap(); // This is the SOAP service call to EmployeeList port.employeeList( response, sqlcode ); EmployeeListDataset result = response.value; EmployeeListDataset.Rowset rowset = result.getRowset(); List<EmployeeListDataset.Rowset.Row> rows = rowset.getRow(); String fieldType; String fieldName; String fieldValue; Integer fieldInt; XMLGregorianCalendar fieldDate; for ( int i = 0; i < rows.size(); i++ ) { EmployeeListDataset.Rowset.Row row = rows.get( i ); fieldType = row.getEmployeeID().getDeclaredType().getSimpleName(); fieldName = row.getEmployeeID().getName().getLocalPart(); fieldInt = row.getEmployeeID().getValue(); System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldInt ); fieldType = row.getSurname().getDeclaredType().getSimpleName(); fieldName = row.getSurname().getName().getLocalPart(); fieldValue = row.getSurname().getValue(); System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldValue ); fieldType = row.getGivenName().getDeclaredType().getSimpleName(); fieldName = row.getGivenName().getName().getLocalPart(); fieldValue = row.getGivenName().getValue(); System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldValue ); fieldType = row.getStartDate().getDeclaredType().getSimpleName(); fieldName = row.getStartDate().getName().getLocalPart(); fieldDate = row.getStartDate().getValue(); System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldDate ); if ( row.getTerminationDate() == null ) { fieldType = "unknown"; fieldName = "TerminationDate"; fieldDate = null; } else { fieldType = row.getTerminationDate().getDeclaredType().getSimpleName(); fieldName = row.getTerminationDate().getName().getLocalPart(); fieldDate = row.getTerminationDate().getValue(); } System.out.println( "(" + fieldType + ")" + fieldName + "=" + fieldDate ); System.out.println(); } } catch (Exception x) { x.printStackTrace(); } } } |
Diese Anwendung gibt alle vom Server gelieferten Spaltendaten in der Standardsystemausgabe aus.
Diese Anwendung geht davon aus, dass Ihr SQL Anywhere-Webserver entsprechend der Anweisungen in der ersten Lektion Port 8082 überwacht. Ersetzen Sie den Teil 8082 der Codezeile import localhost._8082.demo.ws.* durch die von Ihnen beim Start des SQL Anywhere-Webservers angegebene Portnummer.
Weitere Hinweise zu den in dieser Anwendung verwendeten Java-Methoden finden Sie in der API-Dokumentation der javax.xml.bind.JAXBElement-Klasse
unter http://docs.oracle.com/javase/.
Kompilieren Sie Ihre Java-Anwendung mit dem folgenden Befehl:
javac SASoapDemo.java |
Führen Sie die Anwendung mit dem folgenden Befehl aus:
java SASoapDemo |
Die Anwendung sendet ihre Anforderung an den Webserver. Sie empfängt eine Antwort mit einer XML-Ergebnismenge, die aus einem EmployeeListResult mit einer Zeilengruppe mit mehreren Zeileneinträgen besteht.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |