OpenLigaDB Webservice mit Java - kleines Tutorial

Dienstag 25 September 2012 um 00:13

Zugegebenermaßen interessiere ich mich eigentlich nicht für Fußball, aber aus einem anderen Anlass war ich vor einigen Tagen auf der Suche nach Spielergebnissen der Bundesliga aus der vergangenen Saison. Dabei traf ich auf eine Webseite, dessen Betreiber es sich zur Aufgabe gemacht hat, Spielergebnisse jeglicher Art bereit zu stellen. Aufgebaut als Community-Projekt sollten nicht nur die allgemein verfügbaren Ligen dargestellt werden, sondern jeder Nutzer sollte die Möglichkeit haben seine Liga abzubilden und die Ergebnisse selbst einzupflegen. Logischerweise nicht nur auf Fußball beschränkt. Also auch eine Möglichkeit für eine Randsportart oder eine sonst nicht verfügbare Liga ihren eigenen Ergebnisdienst bereits zu stellen.

Die Daten werden nicht aufbereitet sondern über einen SOAP Webservice bereitgestellt. Da auf der Webseite der Zugriff auf den Webservice mit Java nicht mit einem Beispiel abgebildet ist ergab sich die Gelegenheit, sich einmal ein wenig damit zu beschäftigen und ein kleines Tutorial zu schreiben.

Was braucht man ?

Um einen Webservice mit Java zu nutzen benötigt man keine zusätzliche Software. Alles was man dafür benötigt ist bei Java 6 mit dabei. Auch die gängigen Entwicklungsumgebungen bieten Unterstützung für die Nutzung von Webservices. Dies ist bei Netbeans in die IDE integriert. Man benötigt kein zusätzliches Plugin oder Framework um einen Webservice-Client zu erstellen.

Zunächst ist ein normales Java-Projekt anzulegen. Dabei können die Standard-Einstellungen übernommen werden. Eine Main-Klasse kann angelegt werden. 

Projekt anlegen

Ein Webservice auf Basis von Soap ist so etwas wie ein Remote Procedere Call, ein externer Methodenaufruf. Ähnlich dem RMI-Protokoll benötigt man sowohl auf der Server wie auch auf der Clientseite ein wenig Code, der die Methoden des Servers auf dem Client verfügbar macht. Dazu gibt es Möglichkeiten sich diesen Code generieren zu lassen. 

Entweder macht man dies über das bei Java 6 mitgelieferte Programm wsimport, oder man nutzt die Netbeans IDE dazu.

In der Netbeans IDE mit einem Rechts-Klick auf das Projekt-Symbol unseres Beispiel-Projekts klicken und hinter New... (Neu) einen neuen Webservice Client auswählen. 

Webservice hinzufügen

In dem dann erscheinenden Dialogfenster haben wir die Möglichkeit einen Webservice auszuwählen. Wir wählen hier aus den Möglichkeiten die WSDL-Url aus. WSDL steht für Web Service Definition Language. Diest ist eine plattformunabhänige XML-basierte Metasprache zur Definition eines Webservice. Aus dieser Definition ist Netbeans, und auch das genannte Kommandozeilenprogramm wsimport in der Lage die erforderlichen Klassen für den Zugriff auf den Webservice zu erstellen. Eingetragen in das Dialogfeld wird die auf der Webseite von OpenLigaDB genannte URL mit dem Zusatz "?WSDL". Mehr ist nicht erforderlich. 

Webservice über WSDL hinzufügen

Man kann hier einen Package-Namen angeben. Erforderlich ist dies jedoch nicht. Die Klassen sind ohnehin public, also über das ganze Projekt hin zugänglich. Für diesen Test können wir darauf verzichten.

Danach wird von der URL die Webservice Definition geladen und die erforderlichen Klassen werden generiert. 

Generierter Webservice

So, das waren schon alle erforderlichen Vorarbeiten um den Webservice innerhalb meines Java-Projekts verfügbar zu machen.

Ich möchte noch demonstrieren, wie man den Service jetzt nutzt. Dazu belasse ich es bei den Standard-Einstellungen, die den Webservice syncron nutzen. In einem Java-Swing-Programm kann das aber zum "Hängen" der Anwendung führen, wenn der Webservice nicht sofort oder nicht schnell genug antwortet. Daher würde ich dafür den Webservice auf asyncronen Aufruf umstellen. Das zeige ich in einem weiteren Tutorial.

Hier zunächst eine kleine Erweiterung der Main-Klasse, die einen syncronen Webservice-Aufruf erzeugt und mir eine Liste der bei OpenLigaDB verfügbaren Sportarten zurückgibt und anzeigt.

package wstest;
import de.msiggi.sportsdata.webservices.Sport;
import de.msiggi.sportsdata.webservices.Sportsdata;
import de.msiggi.sportsdata.webservices.SportsdataSoap;
import java.util.List;
/**
*
* @author andreas
*/
public class WSTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Sportsdata sd = new Sportsdata();
SportsdataSoap sportsoap = sd.getSportsdataSoap();
System.out.println("*** Test Webservice OpenLigaDB ***");
System.out.println("");
System.out.println("Verfügbare Sportarten");
List<Sport> sportlist = sportsoap.getAvailSports().getSport();
for (int i = 0; i < sportlist.size(); i++) {
Sport sport = sportlist.get(i);
System.out.println("ID: " + sport.getSportsID() + " Sportart: " + sport.getSportsName());
}
}
}

Zunächst ist erforderlich, sich eine Referenz auf den Webservice zu holen. Die Klasse wurde über die WSDL generiert.

Von diesem Webservice wird ein Objekt der Klasse SportsdataSoap erzeugt, in dem die Methodenaufrufe des Webservice enthalten sind.

Der Aufruf der Methode "getAvailSports" liefert ein ArrayObjekt zurück, dass hier auch die Methode getSports() enthält, um eine einfache List zu erzeugen. Über eine For-Schleife kommt man an ein einzelnes Element dieses Arrays, das über die beiden get-Methoden abgefragt werden kann. Hier das Ergebnis:

Ergebnis des Webservice-Aufrufs

Man sieht, die Nutzung eines solchen Webservice ist recht einfach und er ist schnell erstellt. Die Methodenaufrufe können sich auf dem Server ändern oder erweitert werden. Deshalb generiert die IDE bei jedem Clean and Build den Webservice neu. 

Dies sollte ein erster Einstieg sein, in einem weiteren Tutorial zeige ich die Asyncrone Nutzung in einem Java-Swing-Programm und wie man sehr leicht Informationen zu bestimmten Mannschaften oder der Anzahl von Zuschauerzahlen bekommt. 

Best Regards 

Andi ;-)