Themen Web Service - Clients Kommunikation zw. Web Services

Werbung
Themen
Web Service - Clients
Kommunikation zw. Web Services
Stefan Szalowski
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Bisher:
●
Implementierung einer Java Anwendung und Bereitstellung
durch Apache Axis unter Apache Tomcat
–
●
Erzeugen einer WSDL-Datei zur Service-Beschreibung und
Erzeugen der implementierenden Klassen durch Apache
Axis
–
–
●
Java2WSDL
WSDL2Java
Die Grundlage, Web Services nutzen zu können, ist geschaffen
Verwendung von Web Services in eigenen Anwendungen
●
Stefan Szalowski
Implementierung von Web Service Clients
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Kommunikation zw. Client und Web Service
●
Mittels SOAP-Nachrichten
●
Über HTTP (auch andere Protokolle)
ClientRechner
ServerRechner
ClientProgramm
1
Logische Kommunikation
10
ClientStub
SOAPNachricht
Stefan Szalowski
Web Service
Implementierung
ServerSkeleton
Tatsächliche Kommunikation
mittels HTTP
Daten- und Online-Kommunikation
SOAPNachricht
Web Services
Web Service Clients
●
Apache Axis – WSDL2Java
●
Auflistung der von WSDL2Java erzeugten Klassen und
Interfaces aus einer WSDL-Datei
Quelle: http://ws.apache.org/axis/java/user-guide.html
Stefan Szalowski
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
wsdl:types
●
-->
Java-Klassen
Generell: pro Typ eine Klasse
WSDL:
<wsdl:types>
<xsd:schema targetNamespace="http://www.example.org/MeinService/">
<xsd:element name="AdditionsParameter">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Zahl1" type="xsd:int"/>
<xsd:element name="Zahl2" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="AdditionResultat" type="xsd:int"/>
</xsd:schema>
</wsdl:types>
Stefan Szalowski
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
wsdl:types
●
-->
Java-Klassen
Klassenname == type-Name (CodeConv werden eingehalten)
Source:
package org.example.www.MeinService;
public class AdditionsParameter
private int zahl1;
private int zahl2;
implements java.io.Serializable {
public AdditionsParameter() { }
public AdditionsParameter(int zahl1, int zahl2) {
this.zahl1 = zahl1;
this.zahl2 = zahl2;
}
public int getZahl1() { return zahl1; }
public void setZahl1(int zahl1) { this.zahl1 = zahl1; }
public int getZahl2() { return zahl2; }
public void setZahl2(int zahl2) { this.zahl2 = zahl2; }
}
// weitere Methoden
Stefan Szalowski
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
wsdl:types
●
–
-->
Java-Klassen
Klassenname == type-Name (CodeConv werden eingehalten)
Besonderheit:
●
●
●
Stefan Szalowski
Ist ein wsdl:type-Element entweder inout- oder out-Parameter, so
wird eine zusätzliche Holder-Klasse generiert
Holder-Klassen dienen dem schreibenden Zugriff auf Parameter
Für primitive Datentypen (auch für Strings) existieren bereits
Holder-Klassen (siehe javax.xml.rpc.holders.Holder-Interface)
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
wsdl:portType
●
-->
Java-Interface (PortType)
Service Definition Interface (SDI)
WSDL:
<wsdl:portType name="MeinService">
<wsdl:operation name="Addition">
<wsdl:input message="tns:AdditionRequest"/>
<wsdl:output message="tns:AdditionResponse"/>
</wsdl:operation>
<wsdl:operation name="Multiplikation">
<wsdl:input message="tns:AdditionRequest"/>
<wsdl:output message="tns:AdditionResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
Source:
package org.example.www.MeinService;
public interface MeinService_PortType extends java.rmi.Remote {
public int addition(
org.example.www.MeinService.AdditionsParameter additionRequest)
throws java.rmi.RemoteException;
public int multiplikation(
org.example.www.MeinService.AdditionsParameter additionRequest)
throws java.rmi.RemoteException;
}
Stefan Szalowski
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
wsdl:binding
Java-Klasse (Stub)
●
Implementierung des Service Definition Interface (SDI)
●
Stub-Klasse dient als Stellvertreter (Proxy) des Web Service
–
●
●
Stub-Objekt ist lokales Objekt auf der Client-Seite
Erzeugt aus Methoden-Aufrufen auf einem Stub-Objekt SOAPNachrichten, die zum echten Web Service übertragen werden
Stub-Objekte werden nicht vom Client selbst instanziert, sondern
über Methodenaufruf des ServiceLocator (siehe nächste Folie)
–
Stefan Szalowski
-->
Wäre aber möglich
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
wsdl:binding
●
Skelton-Objekt ist lokales Objekt auf der Server-Seite
Dient Apache Axis als Stellvertreter-Klasse der Service
Implementierung
●
Requests an Axis werden an das Skeleton-Objekt weiter gegeben
●
Skeleton ruft Methoden der Implementierenden Klasse auf
–
Stefan Szalowski
Schnittstelle zw. Axis Web-Service-Implementierung
Skeleton-Klasse dient als Stellvertreter (Proxy) des Web Service
–
●
Java-Klasse (Skeleton)
Implementierung des Service Definition Interface (SDI)
–
●
-->
Siehe nächste Folie (Java-Klasse (Impl))
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
wsdl:binding
●
-->
Java-Klasse (Impl)
Implementiert die Operationen des Web Service
–
addition(), multiplikation()
Source:
package org.example.www.MeinService;
public class MeinServiceSOAP1Impl
implements org.example.www.MeinService.MeinService_PortType{
public int addition(org.example.www.MeinService.AdditionsParameter additionRequest)
throws java.rmi.RemoteException {
return additionRequest.getZahl1() + additionRequest.getZahl2();
}
public int multiplikation(
org.example.www.MeinService.AdditionsParameter additionRequest)
throws java.rmi.RemoteException {
return additionRequest.getZahl1() * additionRequest.getZahl2();
}
Stefan Szalowski
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
wsdl:service
●
–
-->
Java-Klasse (ServiceLocator)
Implementiert das o.g. Interface
–
Stefan Szalowski
Java-Interface
Definiert verschiedene getter-Methoden pro portType (Dienst)
wsdl:service
●
-->
Wird auf Client-Seite verwendet, um Stub-Objekte zu instanzieren
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
Client aus generierten Klassen
●
(Java Web Service)
Request-Response-Client
–
–
–
Instanziere ServiceLocator-Objekt (sl)
Hole Dir vom SL ein Stub-Objekt (s)
Rufe die Operation (Methode) auf dem Stub-Objekt auf
Source:
package org.example.www.MeinService;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
public class ServiceClientWithSL {
public static void main(String[] args) {
MeinService_ServiceLocator sl = null;
MeinService_PortType s = null;
try {
sl = new MeinService_ServiceLocator();
s = sl.getMeinServiceSOAP();
int response = s.addition(new AdditionsParameter(3,4));
System.out.println("Additions-Ergebnis: " + response);
} // catch some Exceptions
}}
Stefan Szalowski
Daten- und Online-Kommunikation
Web Services
Web Service Clients
●
Beispiel: Web Service mit den Grundrechenarten
–
Client mittels javax.xml.rpc.*;
●
Stefan Szalowski
Folgt :o)
Daten- und Online-Kommunikation
Web Services
Herunterladen