Service-Oriented Architecture (SOA) [1]



Ähnliche Dokumente
Verteilte Systeme: Übung 4

Webservices. 1 Einführung 2 Verwendete Standards 3 Web Services mit Java 4 Zusammenfassung. Hauptseminar Internet Dienste

SOA. Prof. Dr. Eduard Heindl Hochschule Furtwangen Wirtschaftsinformatik

Wiederholung: Beginn

Implementierung von Web Services: Teil I: Einleitung / SOAP

SOAP Integrationstechnologie für verteilte Middlewarearchitekturen?

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

Übersicht. Angewandte Informatik 2 - Tutorium 6. Teile einer WSDL-Datei. Was ist WSDL. Besprechung: Übungsblatt 5

Enterprise Applikation Integration und Service-orientierte Architekturen. 09 Simple Object Access Protocol (SOAP)

Autor: Peter Seemann Seminar: Softwarearchitekturen Betreuer: Benedikt Meurer

Themen. Web Service - Clients. Kommunikation zw. Web Services

Workflow, Business Process Management, 4.Teil

Java und XML 2. Java und XML

XML und SOAP Einführung und Grundlagen

Architektur von SOAP basierten Web Services

WSDL. Web Services Description Language. André Vorbach. André Vorbach

Wissenschaftliche Vertiefung Web Services. Esslingen, 22. Januar 2016 Simon Schneider

Mobile und Verteilte Datenbanken

WebServices Zwischen Buzzword und Nutzen

Zustandsgebundene Webservices

Web Service Entwicklung mit Java. Sven Lindow

3-schichtige Informationssystem-Architektur

Themen. Web Services und SOA. Stefan Szalowski Daten- und Online-Kommunikation Web Services

Auszug aus JAX-WS Folien

SOA, Webservices und SOAP für Schnelleinsteiger

Praktikum aus Softwareentwicklung 2. Web Services. Java Praktikum SS 2010

Erweitern Sie ihren Tomcat um das AXIS-Framework und machen Sie ihn damit bereit für den Einsatz von Web Services:

VVA Webservice Online Lieferbarkeits-Abfrage

Definition Web Service

arlanis Software AG SOA Architektonische und technische Grundlagen Andreas Holubek

WebService in Java SE und EE

Web-Sevices : WSDL Entwicklung von Web-Anwendungen

JAXM Java API for XML Messaging

Vertiefte Grundlagen Graphentheorie

Thema: Web Services. Was ist ein Web Service?

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten

5. Übung zur Vorlesung Service-orientierte Architekturen

Remote Method Invocation

E-Services mit der Web-Service-Architektur

Man liest sich: POP3/IMAP

Netzprogrammierung Web-Dienste

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

Comtarsia SignOn Familie

Inhalt I. Blick zurück II. Was sind WebServices? III. Rahmenwerk für edienstleistungen IV. Verwendete WebServices

Seminar E-Services WS 02/03 WSDL. Web Services Description Language. Moritz Kleine SES 02 - WSDL

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

.NET-Networking 2 Windows Communication Foundation

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

ARCHITEKTUR VON INFORMATIONSSYSTEMEN

OP-LOG

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Software Reuse Sommer 2004

Norm 225 Service Definition mit WSDL

Anleitung zur Webservice Entwicklung unter Eclipse

4D Server v12 64-bit Version BETA VERSION

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Planung für Organisation und Technik

POIS-Praktikum Prozessimplementierung, RosettaNet PIPs 3A

Grundlagen der Web-Entwicklung INF3172

Gliederung. 1. Einleitung (1) 1. Einleitung (3) 1. Einleitung (2)

Konzept zur Push Notification/GCM für das LP System (vormals BDS System)

Hauptseminar Internetdienste Prof. F. Schweiggert Sommersemester 2004 Universität Ulm. Web Services. Boto Bako

Dokumentation zum Projekt Mail-Adapter in SAP PI Sinkwitz, Sven Theel, Thomas

Motivation. Web Services in der Bioinformatik. Web Services. Motivation (2) Definition

Seminarbericht Rechnernetze XML Web Services Schnittstelle zwischen den Welten.NET und Java

Objektorientierte Programmierung

Kommunikations-Parameter

Programmieren in Java

2. Kommunikation und Synchronisation von Prozessen 2.2 Kommunikation zwischen Prozessen

Die Technik hinter Web Services. Wie baut man einen Web Service? Was sind die technischen Details von WSDL, SOAP und UDDI?

Web-Applications mit SOAP und RSS. Vortrag 8, Jonas Mitschang,

CORBA. Systemprogrammierung WS

Client/Server-Systeme

Der lokale und verteilte Fall

Einführung in die Programmierung

Java Web Services Metadata JSR-181

SOA mit.net: Vom Geschäftsprozess zur Lösung

Firewalls für Lexware Info Service konfigurieren

Haben Sie schon einmal aus einem ScreenCobol Requestor ein Java Programm aufgerufen?

Ausarbeitung im Rahmen des Softwaretechnik Seminars Java Web Services Jürgen de Braaf WS 2004/ 2005

Web-Services Implementierung mit Java

Lexware professional und premium setzen bis einschließlich Version 2012 den Sybase SQL-Datenbankserver

epayment Leistungen des Bundes einfach, schnell und sicher bezahlen mit Payment Eine Idee mit Zukunft

Übungen zu Softwaretechnik

Agenda. Web Services unter Lotus Notes/Domino

Web-Konzepte für das Internet der Dinge Ein Überblick

SAP NetWeaver Gateway. 2013

GI-Services erstellen und bereitstellen

Asynchrone Webservices mit Axis 1.x in Java

Powermanager Server- Client- Installation

Webservices Ein Vortrag von:

Transkript:

Verteilte Systeme SoSe 2007 Service-Oriented Architecture und Web Services Service-Oriented Architecture (SOA) [1] Ziel: Entwicklung einer robusten Architektur zur einfachen, schnellen und sicheren Integration von Systemen und Applikationen, verteilter und heterogener Plattformen SOAs sind unabhängig von der zugrundeliegenden Plattform den verwendeten Protokollen Programiersprachen Hardware SOAs bieten einen abstrakten Blick auf die Geschäftswelt 2 1

Service-Oriented Architecture (SOA) [2] Zur Entwicklung solcher Systeme eignet sich die Kombination von Java (plattformunabhängig Programmiersprache) und XML (plattformunabhängige Repräsentation von Daten). Komponenten werden als Service modelliert, die über das Netzwerk aufgerufen werden können. Ein Service wird durch ein Interface beschrieben, das alle Informationen enthält, um den Service aufrufen zu können. Die Integration von Komponenten wird von der Applikationsebene auf die Interface-Ebene verschoben, was zu looser Kopplung führt. 3 Architektur [1] SOAs können in vier Schichten unterteilt werden: Präsentationsschicht Prozessschicht Serviceschicht Systemschicht 4 2

Architekur [2] Die Präsentationsschicht regelt die Kommunikation mit dem Endnutzer, z.b. über einen Browser. Die Trennung von Präsentationsschicht und Geschäftsprozessen erlaubt das Anbieten der selben Geschäftsprozesse über unterschiedliche Schnittstellen. Die Prozessschicht kombiniert Services zu Geschäftsprozessen gemäß gegebener Regeln. Durch Trennung von Prozessen und Services wird es möglich, Prozesse leicht zu modifizieren und neue Prozesse anzulegen. 5 Architekur [3] Die Serviceschicht bietet eine Menge von Services an, die Geschäftsfunktionalität kapseln. Man unterscheidet grobkörnige und feinkörnige Services. Die Systemschicht enthält die tatsächliche Implementierung eines Service der Serviceschicht. Da die Serviceschicht die Details der Systemschicht versteckt, kann die Implementierung leicht ausgetauscht oder modifiziert werden. 6 3

Rollen und Operation in einer SOA [1] 7 Rollen und Operation in einer SOA [2] Der Service Provider erzeugt eine Servicebeschreibung und deployt den Service, so dass er über das Netzwerk erreichbar ist. Die Servicebeschreibung wird bei einer oder mehreren Service Registries mit Hilfe der publish()- Operation hinterlegt und kann als Vertrag zwischen Service Provider und Service Consumer verstanden werden. Der Service Consumer (Serivce Requestor) sucht nach einer Servicebeschreibung in einer oder mehreren Service Registries mit Hilfe der find()-operation. Nachdem er einen passenden Service gefunden hat, nutzt er die bind()- Operation, um sich an den Service zu binden. Beispielsweise werden jetzt Stubs erzeugt, um den Service aufzurufen. Die Service Registry macht ihre Servicebschreibungen bekannt, damit Service Consumers einen passenden Service finden können. 8 4

Vorteile von SOAs Integration von Geschäftsprozessen schnelle Reaktion auf Änderungen der Geschäftswelt Interoperabilität, Plattform- und Programmiersprachenunabhängigkeit kürzere Time-to-Market Wiederverwendung von Komponenten Integration von Legacy-Systemen langfristige Kostenersparnis 9 Unterschiede zu RPC, RMI und CORBA Remote Procedure Call (RPC) verteilt Anwendungen auf Funktionsebene. Remote Method Invocation (RMI) und Common Object Request Broker Architecture (CORBA) verteilen Anwendungen auf Basis von Objekten. In SOAs werden Anwendungen auf Ebene der Interfaces von Services verteilt. Dies ist in der Industrie leichter verständlich. 10 5

Web Services Web Services ist die am meisten verbreitete Technik, um SOAs zu implementieren Web Services benutzen offene Standards, die von bekannten Industrieunternehmen gemeinschaftlich entwickelt wurden: SOAP Web Services Description Language (WSDL) Universal Description, Discovery and Integration (UDDI) Dies ermöglicht Interoperabilität zwischen verschiedenen Anwendungen in verschiedenen Unternehmen. 11 SOAP (I) SOAP Version 1.2 (SOAP) is a lightweight protocol intended for exchanging structured information in a decentralized, distributed environment. It uses XML technologies to define an extensible messaging framework providing a message construct that can be exchanged over a variety of underlying protocols. The framework has been designed to be independent of any particular programming model and other implementation specific semantics. (World Wide Web Consortium, W3C) 12 6

SOAP SOAP (ehemals: Simple Object Access Protocol) ist ein Kommunikationsprotokoll für die Kommunikation zwischen Anwendungen ist ein Format zum Senden von Nachrichten erlaubt eine lose gekoppelte Kommunikation und ist damit zur Kommunikation über das Internet geeignet ist XML basiert ist plattformunabhängig ist sprachunabhängig ist erweiterbar über HTTP erlaubt das Umgehen von Firewalls ist standardisiert (W3C Standard) 13 Aufbau einer SOAP-Nachricht [1] Eine SOAP-Nachricht muss in XML kodiert sein den SOAP-Envelope Namensraum verwenden http://www.w3.org/2001/12/soap-envelope Eine SOAP-Nachricht darf keine Referenz auf eine DTD enthalten XML Processing Instructions enthalten 14 7

Aufbau einer SOAP-Nachricht [2] <?xml version="1.0"?> <soap:envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingstyle="http://www.w3.org/2001/12/soap-encoding"> <soap:header>... </soap:header> SOAP Envelope <soap:body> SOAP Header... <soap:fault> SOAP Body... </soap:fault> </soap:body> </soap:envelope> SOAP Fault 15 SOAP Header [1] Der SOAP-Envelope Namensraum definiert drei Attribute, die für Header-Elemente verwendet werden können: actor Das actor-attribut legt fest, für welche Stationen das jeweilige Element relevant ist. mustunderstand Ein mustunderstand-element muss vom Empfänger verstanden werden. Kann der Empfänger das Element nicht interpretieren, muss die Verarbeitung des Headers abgebrochen werden. encodingstyle Das encodingstyle-attribut legt die verwendbaren Datentypen innerhalb des entsprechenden Elements fest. 16 8

SOAP Header [2] Der SOAP Header ist optional und enthält anwendungsspezifische Informationen (z.b. Authentifizierungsinformationen). <?xml version="1.0"?> <soap:envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingstyle="http://www.w3.org/2001/12/soap-encoding"> <soap:header> <h:hello xmlns:h="http://www.example.com/sampleheader/" soap:mustunderstand="1"> Good Day </h:hello> </soap:header>... </soap:envelope> Durch das Attribut mustunderstand wird angegeben, dass der Empfänger das zugehörige Element verstehen können muss. 17 SOAP Body mit Request Message Der SOAP Body enthält die eigentliche SOAP Nachricht. Dies umfasst die aufzurufende Operation (Methode) und deren Parameter. <?xml version="1.0" encoding="utf-8"?> <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <soapenv:body> <echo soapenv:encodingstyle= "http://schemas.xmlsoap.org/soap/encoding/"> <s xsi:type="xsd:string">hallo Welt</s> </echo> </soapenv:body> </soapenv:envelope> 18 9

SOAP Body mit Response Message Eine Antwortnachricht könnte folgendermaßen aussehen: <?xml version="1.0" encoding="utf-8"?> <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <soapenv:body> <echoresponse soapenv:encodingstyle= "http://schemas.xmlsoap.org/soap/encoding/"> <echoreturn xsi:type="xsd:string">hallo Welt</echoReturn> </echoresponse> </soapenv:body> </soapenv:envelope> 19 SOAP Fault [1] Ein Fault-Element besitzt die folgenden Kind-Elemente faultcode Fehlernummer zur Identifikation faultstring menschenlesbare Beschreibung des Fehlers faultactor Station, die den Fehler ausgelöst hat detail applikationsspezifische Fehlerinformationen 20 10

SOAP Fault [2] <soapenv:body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:fault> <faultcode>soapenv:server.userexception</faultcode> <faultstring>javax.xml.soap.soapexception: User not authenticated. Please authenticate first!</faultstring> <detail> <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/"> DANGERSEEKER </ns1:hostname> </detail> </soapenv:fault> </soapenv:body> 21 SOAP Binding SOAP Nachrichten können generell über ein beliebiges Transportprotokoll versendet werden (HTTP, SMTP,...). Üblich ist HTTP mittels GET oder POST. POST /axis/services/echoservice HTTP/1.0 Content-Type: text/xml; charset=utf-8 Host: localhost:8090 Content-Length: 343 <?xml version="1.0" encoding="utf-8"?> <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <soapenv:body> <gethelloworld/> </soapenv:body> </soapenv:envelope> 22 11

EchoService in Java package de.fb12.informatik.webservices.server; public class EchoService { public String echo(string input) { return input; public String gethelloworld() { return "Hello World!"; 23 WSDL WSDL (Web Services Description Language) beschreibt den Ort eines Web Service und dessen Operationen (Methoden) ist XML basiert März 2001: WSDL 1.1 wird als W3C Note veröffentlicht Juli 2002: WSDL 1.2 wird als Working Draft veröffentlicht Zur Zeit wird an WSDL 2.0 gearbeitet. WSDL ist noch kein W3C Standard. 24 12

Aufbau eines WSDL-Dokuments <?xml version="1.0" encoding="utf-8"?> <definitions> <types> <!-- Definiert die Datentypen, die der Service verwendet mit Hilfe von XMLSchema. --> </types> <message> <!-- Definiert die Nachrichten, die der Service benutzt. --> </message> <porttype> <!-- Definiert die Operationen (Methoden), die vom Service angeboten werden. --> </porttype> <binding> <!-- Definiert das Protokoll, das der Service verwendet. --> </binding> </definitions> 25 Beispiel: EchoService WSDL <messages> <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://localhost:8080/axis/services/echoservice" xmlns:impl="http://localhost:8080/axis/services/echoservice" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/xmlschema"> <wsdl:message name="echoresponse"> <wsdl:part name="echoreturn" type="xsd:string"/> </wsdl:message> <wsdl:message name="gethelloworldrequest"></wsdl:message> <wsdl:message name="gethelloworldresponse"> <wsdl:part name="gethelloworldreturn" type="xsd:string"/> </wsdl:message> <wsdl:message name="echorequest"> <wsdl:part name="input" type="xsd:string"/> </wsdl:message> 26 13

Beispiel: EchoService WSDL <porttype> <wsdl:porttype name="echoservice"> <wsdl:operation name="echo" parameterorder="input"> <wsdl:input message="impl:echorequest" name="echorequest"/> <wsdl:output message="impl:echoresponse" name="echoresponse"/> </wsdl:operation> <wsdl:operation name="gethelloworld"> <wsdl:input message="impl:gethelloworldrequest" name="gethelloworldrequest"/> <wsdl:output message="impl:gethelloworldresponse" name="gethelloworldresponse"/> </wsdl:operation> </wsdl:porttype> Durch die Definition einer input message und output message wird eine RPC Kommunikation festgelegt. Wird keine output message definiert, findet eine one-way Kommunikation statt. 27 Beispiel: EchoService WSDL <binding> [1] <wsdl:binding name="echoservicesoapbinding" type="impl:echoservice"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="echo"> <wsdlsoap:operation soapaction=""/> <wsdl:input name="echorequest"> <wsdlsoap:body encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://server.webservices.informatik.fb12.de" use="encoded"/> </wsdl:input> <wsdl:output name="echoresponse"> <wsdlsoap:body encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/services/echoservice" use="encoded"/> </wsdl:output> </wsdl:operation> 28 14

Beispiel: EchoService WSDL <binding> [2] <wsdl:operation name="gethelloworld"> <wsdlsoap:operation soapaction=""/> <wsdl:input name="gethelloworldrequest"> <wsdlsoap:body encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://server.webservices.informatik.fb12.de" use="encoded"/> </wsdl:input> <wsdl:output name="gethelloworldresponse"> <wsdlsoap:body encodingstyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/services/echoservice" use="encoded"/> </wsdl:output> </wsdl:operation> </wsdl:binding> 29 UDDI (Universal Description, Discovery and Integration) dient der Entdeckung/Auffindung und Integration/Einbindung von Web Services dient als Verzeichnis für WSDL erstellte Web Service Beschreibungen kommuniziert über SOAP standardisiert die Art und Weise wie Unternehmen ihre Kunden mit Informationen über Produkte und Services erreichen 30 15

SwA (SOAP Messages with Attachments) Da SOAP base64-encoding benutzt, ist es nicht geeignet, um Binärdaten zu übertragen. (Die Nutzlast nimmt um 33% zu.) Daher wurde die SwA-Spezifikation eingeführt. SwA ermöglicht es SOAP Nachrichten als MIME Nachrichten oder mit MIME Nachrichten im Anhang zu versenden. Client call Web-Service SOAP part attachment part 1 : attachment part n 31 SOAP Nachrichten erstellen mit SAAJ [1] import java.net.url; import javax.xml.soap.*; public class saajechoclient{ public static void main(string[] args){ try{ MessageFactory factory = MessageFactory.newInstance(); SOAPFactory soapfactory = SOAPFactory.newInstance(); // create new message SOAPMessage message = factory.createmessage(); SOAPPart soappart = message.getsoappart(); SOAPEnvelope envelope = soappart.getenvelope(); SOAPHeader header = envelope.getheader(); SOAPBody body = envelope.getbody(); // add element to body Name bodyname = soapfactory.createname("echo"); SOAPBodyElement bodyelement = body.addbodyelement(bodyname); bodyelement.setencodingstyle("http://schemas.xmlsoap.org/soap/encoding/"); // add child element to body Name elementname = soapfactory.createname("s"); SOAPElement s = bodyelement.addchildelement(elementname); s.setvalue("hallo Welt"); 32 16

SOAP Nachrichten erstellen mit SAAJ [2] // add attachment AttachmentPart attach = message.createattachmentpart(); attach.setmimeheader("content-type", "text/plain"); String stringcontent = "Nochmals Hallo"; attach.setcontent(stringcontent, "text/plain"); message.addattachmentpart(attach); // realize connection SOAPConnectionFactory soapconnectionfactory = SOAPConnectionFactory.newInstance(); SOAPConnection connection = soapconnectionfactory.createconnection(); URL endpoint = new URL("http://localhost:8080/axis/services/EchoService"); SOAPMessage response = connection.call(message, endpoint); SOAPBody respbody = response.getsoapbody(); System.out.println(respBody.toString()); catch (Exception e) { e.printstacktrace(); 33 Web Service Engines für Java Apache Axis Apache Axis 2 X Fire IBM Web Sphere 34 17

Apache Axis ist eine open-source Web Service engine des Apache Web Services Project ist eine Implementierung des SOAP Protocols läuft in Verbindung mit Tomcat als SOAP Processing Engine erlaubt den Transfer und die Bearbeitung von SOAP Messages 35 Handler und Chain-Konzept [1] Jede SOAP-Nachricht wird in einen Message Context gebettet. Dieser Kontext kann von einem Handler bearbeitet werden. Mehrere Handler können zu einer Chain zusammengefasst werden. In Axis gibt es drei vordefinierte Chains: Transport Chain: kümmert sich um die Übertragung und den Empfang von Daten, z.b. HTTP Sender und Empfänger. Global Chain: kümmert sich um Belange, die jeden Service betreffen, z.b. security,... Service Chain: kümmert sich um die Belange, die jeden einzelnen Service betreffen, z.b. Fehlerkorrektur von Eingaben, Umwandlung von Daten,... 36 18

Handler und Chains-Konzept [2] Axis Engine from client to client transport chain global chain service chain Service (a) Axis Engine Caller service chain global chain transport chain to target service from target service (b) (a) Axis Engine auf Seite des Servers (b) Axis Engine auf Seite des Clients Jede Chain kann sowohl im request flow (eingehende Nachrichten) als auch im response flow (ausgehende Nachrichten) verwendet werden. 37 SOAP Nachrichten erstellen Apache Axis erlaubt die Verwendung eines Call-Objekts zur Erstellung und Versendung einer SOAP-Nachricht. public class echoclient { public static void main(string[] args) { try { Service service = new Service(); Call call = (Call) service.createcall(); call.settargetendpointaddress(new URL("http://localhost:8080/axis/services/EchoService")); call.setoperationname("echo"); call.addparameter("s", XMLType.XSD_STRING, ParameterMode.IN); call.setreturntype(xmltype.xsd_string); Object[] parameters = new String[] { "Hallo Welt" ; Object returnvalue = call.invoke((object[]) parameters); System.out.println(returnValue); catch (Exception e) { e.printstacktrace(); 38 19

Attachments Es ist auch unter Axis möglich zu einem Call-Objekt Attachments hinzuzufügen: AttachmentPart a = new AttachmentPart(); a.setcontentid("procuration.mp3"); a.setdatahandler(new DataHandler(new URL("file:///d:/Procuration.mp3"))); call.addattachmentpart(a); 39 Web Service erstellen Folgende Schritte müssen ausgeführt werden, um einen Web Service zu erzeugen: Java Klasse schreiben, die den gewünschten Dienst erbringt, und diese kompilieren WSDD-Datei schreiben Geschriebene Klasse in das Verzeichnis %TOMCAT_HOME%\webapps\axis\WEB-INF\classes kopieren, Service deployen und Tomcat neu starten 40 20

Schritt 1: Java Klasse schreiben package de.fb12.informatik.webservices.server; public class EchoService { public String echo(string input) { return input; public String gethelloworld() { return "Hello World!"; 41 Schritt 2: WSDD Datei schreiben WSDD (Web Service deployment descriptor) Der deployment descriptor gibt die Informationen an, die in die Tomcat Konfiguration eingetragen werden sollen. <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="de.fb12.informatik.webservices.server.echoservice"/> <parameter name="allowedmethods" value="*"/> </service> </deployment> 42 21

Schritt 3: Service deployen Eine Skriptdatei mit den folgenden beiden Befehlen kopiert die Klasse an die richtige Stelle und meldet sie als Dienst beim laufenden Tomcat an. copy de\fb12\informatik\webservices\server\echoservice.class "%TOMCAT_HOME%\webapps\axis\WEB- INF\classes\de\fb12\informatik\webservices\server" java org.apache.axis.client.adminclient deployserver.wsdd %* Nach Ausführung der Skriptdatei muss der Tomcat neu gestartet werden. 43 Handler schreiben Axis ermöglicht die Verwendung selbst geschriebener Handler. Diese können einer Chain durch einen Eintrag in der Datei server-config.wsdd oder durch einen deployment descriptor hinzugefügt werden. Eine Java-Klasse muss das Interface org.apache.axis.handler implementieren, damit sie als Handler einer Chain hinzugefügt werden kann. Durch die invoke()-methode wird die Funktionalität des Handlers bestimmt. 44 22

Beispiel-Handler public class AttachmentHandler implements org.apache.axis.handler {... public void invoke(messagecontext msgcontext) throws AxisFault { try { Message m = msgcontext.getcurrentmessage(); Iterator it = m.getattachments(); while (it.hasnext()) { AttachmentPart a = (AttachmentPart) it.next(); String filename = a.getcontentid(); InputStream in = (InputStream) a.getcontent(); FileOutputStream fos = new FileOutputStream(new File("e:/temp/" + filename)); byte[] b = new byte[4096]; int n; while ((n = in.read(b)) > 0) { fos.write(b, 0, n); fos.close(); catch (Exception e) { e.printstacktrace();... 45 Handler deployen Der Handler muss wiederum an die richtige Stelle kopiert und danach deployt werden. copy de\fb12\informatik\webservices\server\attachmenthandler.class "%TOMCAT_HOME%\webapps\axis\WEB- INF\classes\de\fb12\informatik\webservices\server\" java org.apache.axis.client.adminclient deployattachmenthandler.wsdd %* Für den AttachmentHandler ist dies durch folgenden deployment descriptor möglich: <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <handler name="attachmenthandler" type= "java:de.fb12.informatik.webservices.server.attachmenthandler"/> </deployment> 46 23

Service deployen Jeder Service, der den Handler benutzen soll, muss diesen in seinen request flow oder response flow eingetragen bekommen. Dies ist durch folgenden deployment descriptor möglich: <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="echoservice2" provider="java:rpc"> <parameter name="classname" value="de.fb12.informatik.webservices.server.echoservice"/> <parameter name="allowedmethods" value="*"/> <requestflow> <handler type="attachmenthandler"/> </requestflow> <responseflow> </responseflow> </service> </deployment> Danach muss Tomcat neu gestartet werden. 47 server-config.wsdd In dem Verzeichnis %TOMCAT_HOME%\Tomcat5.5\webapps\axis\WEB-INF findet sich die Datei server-config-wsdd. Diese Datei konfiguriert die einzelnen Chains für den Tomcat Server und ist in vier Teile eingeteilt: Globale Konfiguration Handler Services Transport 48 24

Global Configuration <?xml version="1.0" encoding="utf-8"?> <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalconfiguration>... <parameter name="attachments.directory" value="e:\temp\attachments"/> <parameter name="attachments.implementation" value="org.apache.axis.attachments.attachmentsimpl"/>... <requestflow> <handler type="java:org.apache.axis.handlers.jwshandler"> <parameter name="scope" value="session"/> </handler> <handler type="java:org.apache.axis.handlers.jwshandler"> <parameter name="scope" value="request"/> <parameter name="extension" value=".jwr"/> </handler> </requestflow> </globalconfiguration> 49 Handlers and Services <handler name="hallohandler" type="java:hallohandler"/> <handler name="attachmenthandler" type="java:de.fb12.informatik.webservices.server.attachmenthandler"/> <handler name="localresponder" type="java:org.apache.axis.transport.local.localresponder"/> <handler name="urlmapper" type="java:org.apache.axis.handlers.http.urlmapper"/> <handler name="authenticate" type="java:org.apache.axis.handlers.simpleauthenticationhandler"/> <service name="adminservice" provider="java:msg"> <parameter name="allowedmethods" value="adminservice"/> <parameter name="enableremoteadmin" value="false"/> <parameter name="classname" value="org.apache.axis.utils.admin"/> <namespace>http://xml.apache.org/axis/wsdd/</namespace> </service>... <service name="echoservice2" provider="java:rpc"> <requestflow> <handler type="attachmenthandler"/> </requestflow> <parameter name="allowedmethods" value="*"/> <parameter name="classname" value="de.fb12.informatik.webservices.server.echoservice"/> </service> 50 25

Transport <transport name="http"> <requestflow> <handler type="urlmapper"/> <handler type="java:org.apache.axis.handlers.http.httpauthhandler"/> </requestflow>... </transport> <transport name="local"> <responseflow> <handler type="localresponder"/> </responseflow> </transport> </deployment> 51 Literatur SOAP Tutorial: http://www.w3schools.com/soap/ SwA: http://www.w3.org/tr/soap-attachments Apache Axis: http://ws.apache.org/axis/ Graham, Davis, et al.: Building Web Services with Java 52 26