Webservices

Werbung
Webservices
Grundlagen, Beispiel, Tomcat, Apache Axis
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
1
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 Nachteile • Zentralisierung
• Zentralisierung
- Wartbarkeit - Verfügbarkeit • Systemunabhängigkeit • Standardisiert • Entkopplung der Logik und
der Darstellung • Aufwand • Authentifizierung JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
2
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.
Transportschicht
Anwendung
Webserver
WebService Stub
WebService
Implementierung
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
3
XML
XML ist:
•
•
•
•
•
•
Extensible Markup Language
Inspiriert durch SGML
Einfach, flexibel, Textformat
Portabel
DTD, XML-Schema (XSD)
http://www.w3.org/XML/
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
XML ist nicht:
• Programmiersprache
• Netzwerkprotokoll
• Datenbank
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
4
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
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
5
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
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
6
Beispiel SOAP Nachricht (Anfrage)
POST /axis/services/Test HTTP/1.0
ContentContent-Type: text/xml; charset=utfcharset=utf-8
Header
UserUser-Agent: Axis/1.1
(HTTP & SOAP)
Host: localhost
SOAPAction: ""
ContentContent-Length: 368
...
<?xml version="1.0" encoding="UTFencoding="UTF-8"?>
<soapenv:Envelope
SOAP Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemaxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
SOAP Body
test
<ns1:test
<ns1:
<ns1:test
<ns1:test
soapenv:encodingStyle=
soapenv:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
"http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="TestPack
xmlns:ns1="
TestPack"/>
"/>
xmlns:ns1="TestPack
TestPack"/>
"/>
xmlns:ns1="
TestPack
TestPack
</soapenv:Body>
</soapenv:Envelope>
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
7
Beispiel SOAP Nachricht (Antwort)
HTTP/1.1 200 OK
ContentContent-Type: text/xml;charset=utftext/xml;charset=utf-8
Header
Date: Thu, 29 Jan 2004 07:04:44 GMT
(HTTP & SOAP)
Server: ApacheApache-Coyote/1.1
Connection: close
...
<?xml version="1.0" encoding="UTFencoding="UTF-8"?>
<soapenv:Envelope
SOAP 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">
xmlns:xsi="http://www.w3.org/2001/XMLSchema<soapenv:Body>
<soapenv:Body>
SOAP Body
<ns1:testResponse
<ns1:testResponse
soapenv:encodingStyle=
soapenv:encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
"http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="TestPack">
xmlns:ns1="TestPack">
<testReturn
xsi:type="xsd:string">Test</testReturn>
<testReturn
xsi:type="xsd:string">Test</testReturn>
</ns1:testResponse>
</ns1:testResponse>
</soapenv:Body>
</soapenv:Body>
</soapenv:Envelope>
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
8
WebServices in Java
Application Server
•
•
•
•
Apache Tomcat
Bea Weblogic
IBM WebSphere
...
SOAP Implementierung
•
•
•
•
Apache AXIS
IBM Web Service Toolkit
Graham Glass GLUE
...
Axis
Servlet1 Servlet2
Tomcat
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
9
Erstellen eines SOAP Beispiels
Service
• Schnittstelle: "Test.java"
package TestPack;
public interface Test {
public String test();
}
• oder "dummy"-Implementierung: "Test.java"
package TestPack;
public class Test {
public String test() {
return "";
}
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
10
Erstellen eines SOAP Beispiels
Erstellen der WSDL
• java org.apache.axis.wsdl.Java2WSDL [optionen] Klasse
-
--output <Name der Zieldatei>
--location <URL des Services>
--namespace <Ziel Namesraum>
...
java org.apache.axis.wsdl.Java2WSDL
--output "Test.wsdl"
--location "http://localhost:8080/axis/services/Test"
TestPack.Test
xy.java
javac
xy.class
Java2WSDL
xy.wsdl
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
11
Erstellen eines SOAP Beispiels
Erstellen der Stubs
• java org.apache.axis.wsdl.WSDL2Java [Optionen] WSDL-URI
- --server-side
- --skeletonDeploy <true | false>
- --output <Zielverzeichnis>
java org.apache.axis.wsdl.WSDL2Java
--server-side
--skeletonDeploy true
--output .
Test.wsdl
xy.wsdl
WSDL2Java
Serverseitige Dateien:
xy.java, xySoapBindingImpl.java,
xySoapBindingSkeleton.java
Dateien für deploy/undeploy:
deploy.wsdd, undeploy.wsdd
Clientseitige Dateien:
xyService.java, xyServiceLocator.java
xySoapBindingStub.java
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
12
Erstellen eines SOAP Beispiels
Achtung "xy.java" überschreibt das Original
package TestPack;
public interface Test {
public String test();
}
/**
* Test.java
*
* This file was auto-generated from WSDL
* by the Apache Axis WSDL2Java emitter.
*/
package TestPack;
public interface Test extends java.rmi.Remote {
public java.lang.String test()
throws java.rmi.RemoteException;
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
13
Erstellen eines SOAP Beispiels
Implementierung in xySoapBindingImpl.java
/**
* TestSoapBindingImpl.java
*
* This file was auto-generated from WSDL
* by the Apache Axis WSDL2Java emitter.
*/
package TestPack;
public class TestSoapBindingImpl implements
TestPack.Test{
public java.lang.String test()
throws java.rmi.RemoteException {
return null;
return "Test";
}
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
14
Erstellen eines SOAP Beispiels
Kompilieren der java Dateien
Kopieren von
• xy.class
• xySoapBindingImpl.class
• xySoapBindingSkeleton.class
nach
"%CATALINA_HOME%\webapps\axis\WEB-INF\classes\<Namensraum>"
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
15
Erstellen eines SOAP Beispiels
Installieren eines Webservices (deploy)
• java org.apache.axis.client.AdminClient <Deployment Descriptor>
java org.apache.axis.client.AdminClient deploy.wsdd
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="Test" provider="java:RPC" style="rpc" use="encoded">
<parameter name="wsdlTargetNamespace" value="TestPack"/>
<parameter name="wsdlServiceElement" value="TestService"/>
<parameter name="wsdlServicePort" value="Test"/>
<parameter name="className" value="TestPack.TestSoapBindingSkeleton"/>
<parameter name="wsdlPortType" value="Test"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
16
Erstellen eines SOAP Beispiels
Anzeigen installierter Services (list):
java org.apache.axis.client.AdminClient list
Komfortabler über http://localhost:8080/axis/services
Entfernen (undeploy):
java org.apache.axis.client.AdminClient undeploy.wsdd
<undeployment xmlns="http://xml.apache.org/axis/wsdd/">
<service name="Test"/>
</undeployment>
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
17
Erstellen eines SOAP Beispiels
Client:
import
import
import
import
TestPack.Test;
TestPack.TestServiceLocator;
javax.xml.rpc.ServiceException;
java.rmi.RemoteException;
public class Client
{
public static void main(String args[])
throws ServiceException, RemoteException
{
Test t;
TestServiceLocator locator;
locator = new TestServiceLocator();
t = locator.getTest();
System.out.println(t.test());
}
}
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
18
Ablauf
Client:
org.apache.axis.client.Call
org.apache.axis.client.Stub
java.rmi.Remote
invoke()
TestPack.Test
TestPack.TestSoapBindingStub
org.apache.axis.client.Service
TestPack.TestService
test()
TestPack.TestServiceLocator
Client
getTest()
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
19
Ablauf
Server:
org.apache.axis.wsdl.Skeleton
java.rmi.Remote
TestPack.Test
TestPack.TestSoapBindingImpl
test()
TestPack.TestSoapBindingSkeleton
test()
Axis
Tomcat
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
20
Überwachen der Client/Server-Kommunikation
java org.apache.axis.utils.tcpmon [List. Port] [Targ. Host] [Targ. Port]
Anfrage
Antwort
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
21
WebService mit .Net
TestService.asmx:
<%@ WebService Language="C#" Class="TestService"%>
using System.Web.Services;
public class TestService : WebService {
[WebMethod]
public string GetTest() {
return "Test";
}
}
Virtuelles Verzeichnis im IIS anlegen, TestService.asmx ablegen
WSDL: .../TestService.asmx?WSDL
Testseite: .../TestService.asmx?op=GetTest
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
22
Zusammenfassung
Sprachunabhängig
• Java
• .NET (C#)
XML
Zentralisiert
• Wartbar
• Verfügbarkeit
Logik und Darstellung entkoppelt
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
23
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
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
24
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%\commonsdiscovery.jar;%AXIS_LIB%\commonslogging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j1.2.8.jar
CLASSPATH=%CLASSPATH%;%AXISCLASSPATH%
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
25
Testen der Installation
http://localhost:8080/axis/happyaxis.jsp
JOHANNES KEPLER UNIVERSITY LINZ
Research and teaching network
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
26
Herunterladen