Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1
Webservices
Grundlagen, Beispiel, Tomcat, Apache Axis
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 2JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Was ist ein WebService
� Eine oder mehrere Methoden die über das Netzwerk aufgerufen werden können.
� Standardisierter Remote Procedure Call (RPC)� Parameter und Rückgabewerte werden serialisiert.� Nachrichtenbasiert� XML� Sprachunabhängig
• Java, .Net, Perl, ...
� Vorteile �• Zentralisierung
- Wartbarkeit �
• Systemunabhängigkeit �• Standardisiert �
• Entkopplung der Logik und der Darstellung �
� Nachteile �• Zentralisierung
- Verfügbarkeit �
• Aufwand �• Authentifizierung �
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 3JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Aufruf eines WebServices
� Anwendung nutzt WebService Stub, sie kümmert sich nicht darum woher der Stub das Ergebnis hat.
� WebService Stub verpackt die Anforderung in XML und schickt sie dem Webserver
� Webserver (z.B.: Tomcat mit AXIS) erkennt die Anfrage und ruft das entsprechende WebService auf (Reflection)
� Webserver verpackt die Antwort in XML und schickt sie an den Stub� Stub entpackt die Antwort und liefert das Ergebnis.
Webserver
WebServiceImplementierung
WebService Stub
Anwendung
Transport-schicht
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 4JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
XML
� XML ist:• Extensible Markup Language• Inspiriert durch SGML• Einfach, flexibel, Textformat
• Portabel
• DTD, XML-Schema (XSD)• http://www.w3.org/XML/
� XML ist nicht:• Programmiersprache
• Netzwerkprotokoll• Datenbank
XML is a markup language, and only a markup language. It's important to remember this fact. The XML hype has become so extreme that some people expect XML to do everything up to, and including, washing the family dog.
XML In A Nutshell, Eliotte Rusty Harold & W. Scott Means
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 5JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
WSDL
� Web Service Description Language� Standard zur Beschreibung von Netzwerkdiensten
• Service- Adresse
- Name
• Funktionen- Name
- Parameter
- Rückgabewert
• Typen - Beschreibung der verwendeten Typen in den Nachrichten
• Nachrichten- Aufbau der möglichen Nachrichten
� Plattformunabhängig� Programmiersprachenunabhängig� XML� http://www.w3.org/TR/wsdl.html
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 6JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
SOAP
� Simple Object Access Protocol� Ziele:
• Einfach
• Erweiterbar
• Leichtgewichtig
� Repräsentation: XML� Standardisiertes Verpackungsprotokoll für Nachrichtenaustausch� Entwickelt von:
• Microsoft
• IBM
• DevelopMentor (Don Box)• UserLand (Dave Winer)
� Seit 2000 W3C Spezifikation (http://www.w3.org/TR/SOAP/)� Implementierungen:
• Apache Axis (früher Apache SOAP)
• Microsoft .NET
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 7JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Beispiel SOAP Nachricht (Anfrage)
POST /axis/services/Test HTTP/1.0POST /axis/services/Test HTTP/1.0POST /axis/services/Test HTTP/1.0POST /axis/services/Test HTTP/1.0ContentContentContentContent----Type: text/xml; charset=utfType: text/xml; charset=utfType: text/xml; charset=utfType: text/xml; charset=utf----8888UserUserUserUser----Agent: Axis/1.1Agent: Axis/1.1Agent: Axis/1.1Agent: Axis/1.1Host: localhostHost: localhostHost: localhostHost: localhostSOAPAction: ""SOAPAction: ""SOAPAction: ""SOAPAction: ""ContentContentContentContent----Length: 368Length: 368Length: 368Length: 368............8"?>8"?>
Header(HTTP & SOAP)
SOAP Envelope
SOAP Body
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 8JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Beispiel SOAP Nachricht (Antwort)
HTTP/1.1 200 OKHTTP/1.1 200 OKHTTP/1.1 200 OKHTTP/1.1 200 OKContentContentContentContent----Type: text/xml;charset=utfType: text/xml;charset=utfType: text/xml;charset=utfType: text/xml;charset=utf----8888Date: Thu, 29 Jan 2004 07:04:44 GMTDate: Thu, 29 Jan 2004 07:04:44 GMTDate: Thu, 29 Jan 2004 07:04:44 GMTDate: Thu, 29 Jan 2004 07:04:44 GMTServer: ApacheServer: ApacheServer: ApacheServer: Apache----Coyote/1.1Coyote/1.1Coyote/1.1Coyote/1.1Connection: closeConnection: closeConnection: closeConnection: close............8"?>8"?>
TestTestTestTest
TestTestTestTest
Test
Header(HTTP & SOAP)
SOAP Envelope
SOAP Body
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 9JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
WebServices in Java
� Application Server• Apache Tomcat• Bea Weblogic• IBM WebSphere
• ...
� SOAP Implementierung• Apache AXIS• IBM Web Service Toolkit• Graham Glass GLUE
• ...
Tomcat
Axis Servlet1 Servlet2
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 10JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Erstellen eines SOAP Beispiels
� Service• Schnittstelle: "Test.java"
• oder "dummy"-Implementierung: "Test.java"
packagepackagepackagepackage TestPack;
publicpublicpublicpublic interfaceinterfaceinterfaceinterface Test {publicpublicpublicpublic String test();
}
packagepackagepackagepackage TestPack;
publicpublicpublicpublic classclassclassclass Test {publicpublicpublicpublic String test() {
returnreturnreturnreturn "";}
}
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 11JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Erstellen eines SOAP Beispiels
� Erstellen der WSDL• java org.apache.axis.wsdl.Java2WSDL [optionen] Klasse
- --output - --location
- --namespace
- ...
java org.apache.axis.wsdl.Java2WSDL--output "Test.wsdl"--location "http://localhost:8080/axis/services/Test"TestPack.Test
xy.java
xy.classjavac
xy.wsdlJava2WSDL
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 12JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Erstellen eines SOAP Beispiels
� Erstellen der Stubs• java org.apache.axis.wsdl.WSDL2Java [Optionen] WSDL-URI
- --server-side- --skeletonDeploy
- --output
java org.apache.axis.wsdl.WSDL2Java--server-side--skeletonDeploy true--output .Test.wsdl
xy.wsdlServerseitige Dateien:xy.java, xySoapBindingImpl.java, xySoapBindingSkeleton.javaDateien für deploy/undeploy:deploy.wsdd, undeploy.wsddClientseitige Dateien:xyService.java, xyServiceLocator.javaxySoapBindingStub.java
WSDL2Java
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 13JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Erstellen eines SOAP Beispiels
� Achtung "xy.java" überschreibt das Original
packagepackagepackagepackage TestPack;publicpublicpublicpublic interfaceinterfaceinterfaceinterface Test {
publicpublicpublicpublic String test();}
/*** Test.java** This file was auto-generated from WSDL* by the Apache Axis WSDL2Java emitter.*/
packagepackagepackagepackage TestPack;publicpublicpublicpublic interface Test extends java.rmi.Remote {publicpublicpublicpublic java.lang.String test()throwsthrowsthrowsthrows java.rmi.RemoteException;
}
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 14JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Erstellen eines SOAP Beispiels
� Implementierung in xySoapBindingImpl.java
/*** TestSoapBindingImpl.java** This file was auto-generated from WSDL* by the Apache Axis WSDL2Java emitter.*/
packagepackagepackagepackage TestPack;
publicpublicpublicpublic classclassclassclass TestSoapBindingImpl implementsimplementsimplementsimplementsTestPack.Test{
publicpublicpublicpublic java.lang.String test()throwsthrowsthrowsthrows java.rmi.RemoteException {
returnreturnreturnreturn null;}
}
return "Test";
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 15JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Erstellen eines SOAP Beispiels
� Kompilieren der java Dateien� Kopieren von
• xy.class
• xySoapBindingImpl.class
• xySoapBindingSkeleton.classnach
"%CATALINA_HOME%\webapps\axis\WEB-INF\classes\"
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 16JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Erstellen eines SOAP Beispiels
� Installieren eines Webservices (deploy)• java org.apache.axis.client.AdminClient
java org.apache.axis.client.AdminClient deploy.wsdd
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 17JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Erstellen eines SOAP Beispiels
� Anzeigen installierter Services (list):
� Komfortabler über http://localhost:8080/axis/services
� Entfernen (undeploy):
java org.apache.axis.client.AdminClient undeploy.wsdd
java org.apache.axis.client.AdminClient list
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 18JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Erstellen eines SOAP Beispiels
� Client:
importimportimportimport TestPack.Test;importimportimportimport TestPack.TestServiceLocator;importimportimportimport javax.xml.rpc.ServiceException;importimportimportimport java.rmi.RemoteException;
publicpublicpublicpublic classclassclassclass Client{
publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid main(String args[])throwsthrowsthrowsthrows ServiceException, RemoteException{
Test t;TestServiceLocator locator;locator = newnewnewnew TestServiceLocator();t = locator.getTest();System.out.println(t.test());
}}
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 19JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Ablauf
TestPack. Test
java.rmi. Remote
Client
org.apache.axis.client.Service
TestPack.TestServiceLocator
TestPack. TestService
org.apache.axis.client.Stub
TestPack.TestSoapBindingStub
getTest()getTest()getTest()getTest()
test()test()test()test()
org.apache.axis.client.Call
invoke()invoke()invoke()invoke()
Client:
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 20JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Ablauf
TestPack.TestSoapBindingSkeleton
TestPack.Test
org.apache.axis.wsdl. Skeleton
java.rmi. Remote
TestPack.TestSoapBindingImpl
test()test()test()test()
Server:
Tomcat
Axis
test()test()test()test()
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 21JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Überwachen der Client/Server-Kommunikation
� java org.apache.axis.utils.tcpmon [List. Port] [Targ. Host] [Targ. Port]
Anfrage
Antwort
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 22JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
WebService mit .Net
� TestService.asmx:
� Virtuelles Verzeichnis im IIS anlegen, TestService.asmx ablegen� WSDL: .../TestService.asmx?WSDL� Testseite: .../TestService.asmx?op=GetTest
usingusingusingusing System.Web.Services;
publicpublicpublicpublic classclassclassclass TestService : WebService {[WebMethod]publicpublicpublicpublic stringstringstringstring GetTest() {
returnreturnreturnreturn "Test";}
}
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 23JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Zusammenfassung
� Sprachunabhängig• Java
• .NET (C#)
� XML� Zentralisiert
• Wartbar
• Verfügbarkeit
� Logik und Darstellung entkoppelt
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 24JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Tomcat 5
� Voraussetzungen:• Java SDK Version >= 1.3
• Umgebungsvariablen- JAVA_HOME=C:\j2sdk1.4.2_02
- CATALINA_HOME=C:\Webservices\jakarta-tomcat-5.0.16
� Download: http://apache.netmonic.com/jakarta/tomcat-5/� Starten: startup
- CATALINA_HOME\bin\startup.bat
- Linux: CATALINA_HOME/bin/startup.sh
� Betrieb: http://localhost:8080/� Stoppen: shutdown
- Windows: CATALINA_HOME\bin\shutdown.bat
- Linux: CATALINA_HOME/bin/shutdown.sh
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 25JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Apache AXIS 1.1
� Voraussetzungen:• Java SDK Version >= 1.4
• Servlet Container (z.B.: Tomcat)- http://jakarta.apache.org/tomcat/
• JavaBeans Activation Framework- http://java.sun.com/products/javabeans/glasgow/jaf.html
� Download: http://ws.apache.org/axis/� Entpacken
� Kopieren• ??\Axis-1_1\webapps\axis -> CATALINA_HOME\webapps\• ??\jaf-1.0.2\activation.jar -> CATALINA_HOME\common\lib\
� Umgebungsvariablen• AXIS_HOME=c:\Webservices\axis-1_1• AXIS_LIB=%AXIS_HOME%\lib
• AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar;%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar
• CLASSPATH=%CLASSPATH%;%AXISCLASSPATH%
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 26JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Testen der Installation
� http://localhost:8080/axis/happyaxis.jsp