Web Services

Werbung
Apache Axis
Projektgruppe Peer2Peer Suche nach Webservices
WS 2004/SS 2005
Benjamin Bayer
Betriebssysteme
und
Verteilte
Systeme
Inhalt
4 Kurzer Überblick über Web Services und SOAP
4 Axis im Überblick
4 Erstellung eines Web Service
4 Implementierung eines Clients
4 Axis und WSDL
4 WSDL2Java, Java2WSDL
4 Architektur
4 Aufbau von Axis, Handler
4 Typ-Mapping, Scoping
4 TCPMonitor
4 Zusammenfassung
4PG P2P: Apache Axis
2
Web Services
4 Ein Web Service ist ein Dienst im Internet, der unter einer
bestimmten URI erreichbar ist
4 Web Services sind Dienste für Anwendungen
4 Kommunikation erfolgt über SOAP-Nachrichten
4 SOAP ist Plattform-und programmiersprachenunabhängig
4 Protokollunabhängig; Versendung über HTTP, FTP, …
4 Datenaustausch zwischen Anwendungen, die in verschiedenen
Programmiersprachen geschrieben sind -> Interoperabilität
4 Grundlage sind folgende Standards:
4 SOAP, WSDL, UDDI
4PG P2P: Apache Axis
3
Axis
4 Axis ist ein Toolkit zur Erstellung von Web Services
4 Java-Framework zur Erstellung von Servern, Clients, Gateways
4 Es gibt auch eine C++ - Version, die aber noch nicht so ausgereift ist
4 Es wird unter Lizenz der Apache Software Foundation entwickelt
4 Nachfolger von Apache SOAP
4 Apache Soap selber basiert auf SOAP4J, das von IBM Ende 2000
entwickelt wurde
4 Wichtigste Verbesserungen gegenüber Apache SOAP:
4 Geschwindigkeit: SAX statt DOM-Parser
4 Flexibilität: Dank der überarbeiteten Architektur lässt sich Axis fast
beliebig erweitern
4 Transportunabhängigkeit: Axis kann Nachrichten über HTTP, FTP,
SMTP übertragen
4PG P2P: Apache Axis
4
Axis braucht einen Server
4 Axis benötigt einen Server, z.B. Tomcat
4 Web-Anwendung in Form von drei Servlets
4 Axis Servlet:
4Nimmt Web-Services auf und routet Anfragen an diese weiter
4 AdminServlet:
4Einrichten und Entfernen von Services
4 SOAP Monitor Servlet:
4Anzeige der ein- und ausgehenden SOAP-Nachrichten
4PG P2P: Apache Axis
5
Webservice erstellen
4 Deployment eines Services am Beispiel EchoService
public class EchoService
{
public String Echo (String s)
{
return "Erhalten: " + s;
}
}
4PG P2P: Apache Axis
6
Web Service erstellen
4 Instant Deployment:
4 EchoService.java nach <webapp-root>\axis kopieren
4 EchoService.java nach EchoService.jws umbenennen
4 Service erreichbar unter
4http://localhost:8080/axis/EchoService.jws
4 Datei wird bei Anfrage automatisch gefunden und kompiliert
4 Nachteile
4 Man benötigt den Sourcecode
4 Keine Konfigurationsmöglichkeiten
4 Keine Verwendung von Java-Paketen möglich
4 Nur für einfache Web Services
4PG P2P: Apache Axis
7
Web Service erstellen
4 Custom Deployment: Deploying mittels Deployment Descriptor
4 Beispiel:
<deployment xmlns="http://xml.apache.org/axis/wsdd
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name=“EchoService" provider="java:RPC">
<parameter name="className" value=“EchoService"/>
<parameter name="allowedMethods" value=“*"/>
</service>
</deployment>
deploy.wsdd
4PG P2P: Apache Axis
8
Web Service erstellen
4 Deploying mit AdminClient
4Port 8080 Standard, sonst mit -p <port> angeben
4URL: http://localhost:8080/axis/services/EchoService
4 Web Service wird wieder entfernen:
<undeployment
xmlns="http://xml.apache.org/axis/wsdd/">
<service name="EchoService"/>
</undeployment>
4PG P2P: Apache Axis
9
Client mit Axis
4 Implementierung eines Clients am Beispiel EchoService
4 URI: http://localhost:8080/axis/services/EchoService
4 Bietet eine Methode „Echo“ an
4Bekommt einen String-Parameter übergeben und gibt String zurück
4 Drei Klassen benötigt:
4 import javax.xml.namespace.QName;
4 import org.apache.axis.client.Call;
4 import org.apache.axis.client.Service;
4PG P2P: Apache Axis
10
Client mit Axis
4 Serviceobjekt erzeugen, welches ein Call-Objekt zurückgibt:
4 Service service = new Service();
4 Call call = (Call)service.createCall();
4 Call-Objekt erhält alle Informationen für Methodenaufruf
4 String Endpoint =
"http://localhost:8080/axis/services/EchoService“;
4 call.setTargetEndpointAddress(new java.net.URL(Endpoint));
4 call.setOperationName(new QName(“EchoService",“Echo"));
4 Aufrufen der Methode Echo
4 String ret = (String) call.invoke(new Object[] {"Hallo"});
4PG P2P: Apache Axis
11
„Untyped“ Server
4 Vom Server erzeugte Antwort:
4 Typ des zurückgegebenen Parameter ist normalerweise
angegeben, kann aber auch fehlen
<ns1:echoStringResponse xmlns:ns1="http://soapinterop.org/">
<result xsi:type="xsd:string" >Hello!</result>
</ns1:echoStringResponse>
4 Lösung: Typ explizit angeben
4 call.setReturnType( org.apache.axis.Constants.XSD_STRING );
4 call.setReturnClass(String.class);
4PG P2P: Apache Axis
12
Parameter benennen
4 Übergebene Parameter werden durchnummeriert
4 Soap-Nachricht:
<soapenv:Body>
…
<ns1:arg0 xsi:type="soapenc:string" xmlns:soapenc=
"http://schemas.xmlsoap.org/soap/encoding/">Hallo</ns1:arg0>
</ns1:Echo>
…
</soapenv:Body>
4PG P2P: Apache Axis
13
Parameter benennen
4 Parameternamen angeben:
4 call.addParameter(„StringParam",
org.apache.axis.Constants.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
4 call.setReturnType( org.apache.axis.Constants.XSD_STRING );
<soapenv:Body>
…
<ns1:“StringParam“ xsi:type="soapenc:string"
"http://schemas.xmlsoap.org/soap/
encoding/">Hallo</ns1:“StringParam“>
</ns1:Echo>
…
</soapenv:Body>
4PG P2P: Apache Axis
xmlns:soapenc=
14
Axis und WSDL
4 WSDL – Web Service Description Language
4 Maschinenlesbare Beschreibung eines Web Services
4 Informationen über den Ort eines Service, aufrufbare Methoden
sowie Rückgabewerte und Parameter dieser Methoden
4 auf welche Weise unterstützt Axis WSDL:
4 Automatische WSDL-Generierung für installierte Services
4 WSDL2Java: Codegenerierung für Client
4Einfache Implementierung eines Client für einen Web Service
4 Java2WSDL
4WSDL aus Java-Klasse generieren
4Vereinfacht das Erstellen eines Web Service
4PG P2P: Apache Axis
15
WSDL-Generierung für installierte Services
4 Ist ein Web Service mit Axis erstellt worden, erhält man die
dazugehörige WSDL-Datei, indem man „?WSDL“ an die URL
anhängt, z.B
4 http://localhost:8080/axis/services/EchoService?WSDL
4PG P2P: Apache Axis
16
WSDL2Java
4 WSDL2Java ermöglicht einfachen Zugriff auf einen Web Service
Methodenaufruf
Proxy-Stub
Codegenerierung
Clien
t
WSDL-Datei
4PG P2P: Apache Axis
Web
Servi
ce
17
WSDL2Java
4 Generierte Klassen:
WSDL Clausel
Generierte Java-Klasse
Für jeden Typ
Eine Java-Klasse
Einen Holder bei inout/outParametern
Für jeden Port-Typ
Ein Java-Interface
Für jedes Binding
Eine Stub-Klasse
Für jeden Service
Ein Service-Interface
Eine ServiceImplementierung (Locator)
4PG P2P: Apache Axis
18
WSDL2Java
4 Erzeugung Client-Stub am Beispiel EchoService:
EchoService.java
EchoServiceService.java
implements
implements
returns
EchoServiceSoapBindingStub.java
EchoServiceServiceLocator.java
4 EchoServiceService service = new EchoServiceServiceLocator();
4 EchoService echo = service.getEchoService();
4 String ret = echo.echo("Hallo");
4PG P2P: Apache Axis
19
Java2WSDL
4 Tool, welches das Erstellen eines Web Service vereinfacht
4 Generierung einer WSDL-Datei aus Java-Klasse oder Interface
4 Aus dieser WSDL-Datei lassen sich weitere Dateien generieren:
Java-Interface
WSDL
Stub für Client
Vorlage für
Implementation
Deployment
Descriptoren
4EchoServiceSoapBindingImpl.java
deploy.wsdd
EchoService.java
undeploy.wsdd
EchoServiceService.java
EchoServiceServiceLocator.java
Server-Skeleton
EchoServiceSoapBindingstub.java
4EchoServiceSoapBindingSkeleton.java
4PG P2P: Apache Axis
20
Architektur
4 Axis arbeitet auf der Basis von Nachrichtenverarbeitung
4 Eine Nachricht wird in ein MessageContext-Objekt verpackt und
durch eine Reihe von Handlern verarbeitet, die in einer bestimmten
Reihenfolge aufgerufen werden
MessageContext
Request Message
SOAPPart
Attachment
Response Message
SOAPPart
Attachment
4PG P2P: Apache Axis
21
Architektur
4 Handler: Java-Klasse, welche einen MessageContext verarbeitet
4 Jedem Handler wird MessageContext übergeben
Message
Context
Handler
Message
Context
4 Kette (Chain): Zusammenfassung mehrerer Handler
Message
Context
4PG P2P: Apache Axis
Handler 1
Handler 2
Handler 3
Message
Context
22
Architektur
4 Unterscheidung, ob Axis als Server oder als Client verwendet wird
4 Als Server:
4 Eingehende SOAP-Nachricht wird von Transport Listener in
MessageContext-Objekt verpackt
4 MessageContext wird an Axis-Engine weitergeleitet
4 Als Client:
4 MessageContext wird von Client-Applikation erzeugt
4 Es gibt drei übergeordnete Chains:
4 Transport, Global, Service
4 Jede dieser Chains kann Request- und Response-Chain enthalten
4PG P2P: Apache Axis
23
Architektur
4 Nachrichtenpfad
Quelle: www.oio.de
4PG P2P: Apache Axis
24
Handler für Web Service definieren
4 Man kann einem Web Service Handler zuweisen
4 Beispiel: LogHandler
4 Ist bereits in Axis enthalten
4 Ein Handler wird in der wsdd-Datei definiert:
<deployment …>
<handler name="track" type="java:samples.userguide.example4.LogHandler">
<parameter name="filename" value="MyService.log"/>
</handler>
<service name=“EchoService" provider="java:RPC">
…
<requestFlow>
<handler type="track"/>
</requestFlow>
…
</service>
</deployment>
4PG P2P: Apache Axis
25
Axis mit eigenen Handlern erweitern
4 Wie bei einem Service kann man auch Axis mit eigenen Handlern
erweitern
4 Definition erfolgt in Server-config.wsdd:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<requestFlow></requestFlow>
<responseFlow></responseFlow>
</globalConfiguration>
<transport name="http">
<requestFlow></requestFlow>
<responseFlow></responseFlow>
</transport>
</deployment>
4PG P2P: Apache Axis
26
Typ Mapping
4 Java-Datentypen müssen in XML kodiert werden
4 Einfache Datentypen werden automatisch serialisiert/deserialisiert
4 Axis folgt dabei der JAX-RPC-Spezifikation
xsd:base64Binary
byte[]
xsd:hexBinary
Byte[]
xsd:boolean
Boolean
xsd:int
Int
xsd:byte
Byte
xsd:integer
Java.math.BigInteger
xsd:dateTime
Java.util.Calendar
xsd:long
Long
xsd:decimal
Java.math.BigDeci
mal
xsd:Qname
Javax.xml.namespace
.Qname
xds:double
Double
xsd:short
Short
xsd:float
Float
xsd:string
Java.lang.String
4PG P2P: Apache Axis
27
Bean Serializer
4 Axis kann Java Beans automatisch serialisieren/deserialisieren
class Bestellung {
private int Anzahl;
private String Kunde;
…
public void setAnzahl(int Anzahl) {
this.Anzahl = Anzahl;
}
public int getAnzahl() {
return Anzahl;
}
…
}
4 Bean-Mapping muss in wsdd-Datei angegeben werden
<beanMapping qname="ns:local" xmlns:ns="someNamespace"
languageSpecificType="java:Bestellung"/>
4PG P2P: Apache Axis
28
Scoping
4 Angabe des Scope-Parameters ermöglicht Kontrolle über
Erzeugung der Service-Objekte
4 Request Scope
4 Bei jeder Anfrage wird eine neue Instanz des Service erstellt
(Standardeinstellung)
4 Application Scope
4 Es wird ein einzelnes Objekt erzeugt, das alle Anfragen bearbeitet
4 Shared Objekt
4 Session Scope
4 Für jeden verbundenen Client wird ein Objekt erzeugt
4PG P2P: Apache Axis
29
TCPMonitor
4 Zum Betrachten des Netzwerkverkehrs
4 Aufruf über Kommandozeile:
java org.apache.axis.utils.tcpmon [listenport targetHost targetPort]
4 Nachricht wird an TCPMonitor geschickt, dann erst an den
Empfänger
4PG P2P: Apache Axis
30
TCP Monitor
Ausgehende
Nachricht
Eingehende
Nachricht
4PG P2P: Apache Axis
31
Zusammenfassung
Features:
4 Unterstützt SOAP 1.1 / 1.2
4 Unterstützt alle Basistypen sowie ein Typ-Mapping-System für
eigene Serializer/Deserializer
4 Umwandlung von Java-Collections in SOAP-Arrays und umgekehrt
4 Automatische Serialisierung/Deserialisierung von EJB
4 Automatische WSDL-Generierung für Web Services
4 WSDL2Java: Generierung von Java-Klassen für Client
4 Java2WSDL: Generierung WSDL aus Java-Klasse
4 TCPMonitor: Kontrollieren von TCP/IP-Paketen
4PG P2P: Apache Axis
32
Zusammenfassung
4 Vorteile
4 Zur Zeit wohl eines der besten kostenlosen SOAP-Frameworks für
Java
4 Hohe Konfigurierbarkeit, da durch Handler beliebig erweiterbar
4 Standard- Javatypen und JavaBeans werden automatisch
behandelt
4 Schnelles Deployment einfacher Web Services
4 Einfache Client-Implementation mit WSDL2Java
4 Einfache Erstellung eines Web Service mit Java2WSDL
4PG P2P: Apache Axis
33
Zusammenfassung
4 Nachteile
4 Keine asynchrone Nachrichtenverarbeitung
4 keine vollständige Unterstützung von SOAP-Attachments
4 Weniger effizient als RMI oder Corba
4Allgemeiner Nachteil von Web Services
4 Keine eigene Unterstützung von UDDI
4Arbeitet aber gut mit UDDI4J zusammen
4PG P2P: Apache Axis
34
Axis in der Projektgruppe
4 Aufgaben:
4 Web Service zum Bereitstellen und Monitoring von Ressourcen auf
einem Rechner
4Bereitstellen gewonnener Daten mit Axis kein Problem
4Aber: ist Java geeignet zum Ressourcen-Monitoring?
4 Beantwortung und Weiterleitung lokaler Suchanfragen
4Axis kann als Server und als Client agieren; Weiterleiten von
Suchanfragen möglich
4PG P2P: Apache Axis
35
4Danke für die Aufmerksamkeit
4PG P2P: Apache Axis
36
Herunterladen