26
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1 JOHANNES 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

Grundlagen, Beispiel, Tomcat, Apache Axis...Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1 JOHANNES KEPLER UNIVERSITY LINZ Research and teachingnetwork Webservices Grundlagen,

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

  • 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