# Zusammenhang zwischen SOAP und WSDL



## oraclin25 (22. August 2013)

Hallo zusammen,

ich habe folgenden Text im Internet gefunden:

Normalerweise greifen unsere Kunden über unsere Web-Oberfläche auf die Daten ihres Accounts zu oder sie lassen sich regelmäßig ihre Daten per Statistik Export und E-Mail zusenden. Allerdings sind diese Daten nur schwer oder überhaupt nicht für eine weitergehende Verarbeitung geeignet. 

Über die Web Services API können Sie ein standardisiertes Verfahren unter Einsatz von SOAP und WSDL zur Abfrage und weiteren Verarbeitung der Daten nutzen.

Ich habe nicht verstanden, was der rote Text meint; daraufhin habe ich ein bisschen gegoogelt und habe folgende Erkenntnise rausgezogen:
1. Es gibt offensichtlich eine WSDL-Datei(eine schlichte Datei, sieht aus wie eine XML-Datei)
2. SOAP ist irgendwie "nur" ein Protokoll zur Datenübertragung zwischen Systemen
3. WSDL ist eine Beschreibungssprache, ähnlich wie XML-Sprache

Bei XML-Thematik ist ja klar, dass man die XML-Datei parsen muss; in der XML-Datei steht dann die Logik der Datei.  

Was ist denn hier der Zusammenhang zwischen WSDL und SOAP.  Noch verwirrender steht im Text, "über die Web Services API können Sie ..."  Was für eine API ist hier gemeint, vielleicht eine Webservices API von irgendeiner höheren Sprace wie Java?

Vielen Dank für Eure Hilfe.

Viele Grüße aus Rheinland,

Eure Ratna


----------



## Martin Honnen (23. August 2013)

WSDL  ist "Web Services Description Language", siehe http://de.wikipedia.org/wiki/Web_Services_Description_Language. Damit werden die Methoden samt Parameter eines Webservice definiert. Es ist richtig, das WSDL ein XML-Format ist. SOAP (http://de.wikipedia.org/wiki/SOAP) ist das Netzwerkprotokoll, in dem der Datenaustausch zwischen Client und Webservice funktioniert. Eine SOAP-Nachricht ist auch wieder ein XML-Dokument.

Normalerweise schreibt man heute weder als Ersteller des Webservice noch als sein Benutzer selber die XML-Dokumente oder SOAP-Nachrichten, sondern es gibt in den API/Frameworks wie .NET Framework oder Java EE die Möglichkeit (http://docs.oracle.com/javaee/6/tutorial/doc/giqsx.html), mit Klassen bzw. Interfaces und Objekten und ihren Methoden in der Programmiersprache der Wahl (also z.B. C# oder VB oder Java) den Webservice zu implementieren bzw. darauf zuzugreifen, siehe docs.oracle.com/javaee/6/tutorial/doc/bnayn.html. 

Dadurch sollte es zumindest in der Theorie möglich sein, den Webservice z.b. in Java zu implementieren, dann aber mit Clients in anderen Sprachen wie z.B. C# darauf zuzugreifen. WSDL und SOAP haben aber eine gewisse Komplexität, so das die Interoperabilität in der Praxis nicht immer gegeben ist.


----------



## oraclin25 (23. August 2013)

Hallo Martin Honnen,

vielen lieben Dank für die ausfühliche Erklärung.  So wie ich es verstanden habe:
1.  Es gibt ein Web Service
2.  Es gibt eine WSDL-Datei
3.  Es gibt die Web Service API/Schnittstelle

Ist 2 = 3 ?

Was ist denn aber hierbei die Web Service API/Schnittstelle?  Der Original-Text sieht wie folgt aus:

Über die Web Services API können Sie ein standardisiertes Verfahren unter Einsatz von SOAP und WSDL zur Abfrage und weiteren Verarbeitung der Daten nutzen. 

Im Zuge einer serviceorientierten Architektur unterstützen heute alle gängigen Programmiersprachen die Verwendung von Web Services. Es wird eine WSDL-Datei (Web Service Description Language) im Web zur Verfügung gestellt, die die Schnittstelle technisch beschreibt.  Damit der Zugriff auf die Web Services API möglich ist, muss jedoch zunächst ein Client erstellt werden, der die WSDL-Datei liest 

Im letzten Satz steht, dass auf die Web Services API zugegriffen werden muss.  Ich verstehe nicht wie hier gemeint ist?  Ich greife doch nicht auf irgendeine API zu, sondern ich benutze diese API um (in diesem Fall) irgendwelche Sachen zu holen.


Vielen Dank.

Viele Grüße aus Rheinland,

Eure Ratna


----------



## Martin Honnen (24. August 2013)

Das WSDL-Dokument beschreibt die Schnittstelle und ist dazu gedacht bzw. wird üblicherweise dazu benutzt, dass ein Client generiert werden kann.
Siehe für Java z.b. http://docs.oracle.com/javaee/6/tutorial/doc/bnayn.html#bnayx, da steht: "The HelloAppClient class is a stand-alone application client that accesses the sayHello method of HelloService. This call is made through a port, a local object that acts as a proxy for the remote service. The port is created at development time by the wsimport task, which generates JAX-WS portable artifacts based on a WSDL file.".

Man kann also mit dem Tool "wsimport" und der WSDL-Beschreibung eines Webservice Javacode generieren, um auf den Webservice zuzugreifen. In Java macht man dann nicht mehr als


```
package appclient;
 // hier wird die von wsimport generierte Klasse importiert
import helloservice.endpoint.HelloService;
import javax.xml.ws.WebServiceRef;

public class HelloAppClient {
    @WebServiceRef(wsdlLocation = 
      "META-INF/wsdl/localhost_8080/helloservice/HelloService.wsdl")
    private static HelloService service;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       System.out.println(sayHello("world"));
    }

    private static String sayHello(java.lang.String arg0) {
        helloservice.endpoint.Hello port = service.getHelloPort();
        return port.sayHello(arg0);
    }
}
```

Dabei wird also vollkommen mit Java gearbeitet, weder SOAP noch WSDL muss der Benutzer des Webservice verstehen, vor allem müssen keine SOAP-Nachrichten oder andere XML-Dokumente erstellt und ausgelesen werden, dass passiert durch den generierten Code.


----------

