Java - von am Sonntag, Januar 27, 2008 23:45 - 23 Kommentare

WebService in Java

Mit Erscheinen des JDK 6 ist die Implementation von WebServices noch einfacher geworden, da die benötigten Libraries aus dem Java Web Services Developer Pack (JWSDP) Einzug in das JDK 6 Release gefunden haben. Alternativ lässt sich beispielsweise immer noch Apache Axis verwenden, aber für das folgende, einfache, Beispiel nutzen wir die Standardlibraries. Implementiert werden soll eine einfache Anwendung, die die Summe zweier übergebenen Werte zurückgibt und diese Funktionalität als WebService bereitstellt.

Vorweg sei Ihnen zum besseren Verständnis der Thematik das absolut lesenswerte Standardwerk von Ingo Melzer, Service-orientierte Architekturen mit Web Services: Konzepte – Standards – Praxis, ans Herz gelegt. Es geht nicht nur auf WebServices und die damit zusammenhängenden Technologien, sondern auch auf die Service-orientierten Architekturen ein und sollte in keinem IT-Bücherschrank fehlen.

Was ist ein WebService?

Vereinfacht ausgedrückt stellt ein Anbieter über einen WebService einen Dienst bereit, der von externen Anwendungen angesprochen werden kann. Über den Verzeichnisdienst UDDI oder auch ebXML können solche Dienste öffentlich gemacht werden und über die Web Services Description Language (WSDL), einer XML-Spezifikation, wird angebundenen Anwendungen bekannt gegeben, welche Funktionen der Dienst genau bereitstellt. Die Kommunikation findet über das Simple Object Access Protocol (SOAP), einem XML-basierten Protokoll, statt.
Der Vorteil dieser Gesamtkombination ist, daß die Dienste, als auch die sie benutzenden Anwendungen, in grundverschiedenen Programmiersprachen und Plattformen implementiert sein können. Ein Dienst kann beispielsweise in .NET implementiert sein, seine Schnittstellen als WebService per UDDI und WSDL öffentlich machen und über SOAP mit einem PHP oder Java-Client kommunizieren und Aufrufe seiner Funktionen ermöglichen.

Implementation der WebService Klasse

Prinzipiell lässt sich jede Klasse als WebService exportieren. Alles was wir dafür tun müssen ist, die in Java 5 eingeführten Java Annotations dazu zu verwenden, unsere Klassen als WebService zu deklarieren. Die folgende normale Java-Klasse:

package de.theserverside.webservice.service;

public class Calculator {
public long addValues(int val1, int val2) {
return val1 + val2;
}
}

… wird, versehen mit WebService-spezifischen Java Annotations, zu folgender Klasse:

package de.theserverside.webservice.service;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.RPC)

public class Calculator {
public long addValues(int val1, int val2) {
return val1 + val2;
}
}

Über die Angabe @SOAPBinding(style=Style.RPC) geben wir an, daß diese Klasse per SOAP-Protokoll gebunden werden soll und die Kommunikation prozedurorientiert (RPC = Remote Procedure Call) stattfindet. Das zeigt an, daß Aufrufe Parameter enthalten und Werte zurückgegeben werden. Die Angabe Style.DOCUMENT hieße, daß Aufrufe Dokumente enthielten.

Implementation des WebService Servers

Diese Klasse möchten wir jetzt als WebService veröffentlichen und implementieren dazu einen Server, der sie nach außen veröffentlicht. Die Publizierung findet dabei über den integrierten HTTP-Server statt:

package de.theserverside.webservice.server;

import javax.xml.ws.Endpoint;
import de.theserverside.webservice.service.Calculator;

public class CalculatorServer {
public static void main (String args[]) {
Calculator server = new Calculator();
Endpoint endpoint =
Endpoint.publish("http://localhost:8080/calculator", server);
}
}

Starten Sie diese Klasse aus der Entwicklungsumgebung heraus und prüfen Sie den Erfolg der Operation, indem Sie im Webbrowser die folgende URL aufrufen:
http://localhost:8080/calculator?wsdl
Sie sollten etwa folgende Ausgabe erhalten:

<!--?xml version="1.0" encoding="UTF-8"?-->
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6. -->
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6. -->
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.webservice.theserverside.de/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetnamespace="http://service.webservice.theserverside.de/" name="CalculatorService">
<types></types>
<message name="addValues">
  <part name="arg0" type="xsd:int"></part>
  <part name="arg1" type="xsd:int"></part>
</message>
<message name="addValuesResponse">
  <part name="return" type="xsd:long"></part>
</message>
<porttype name="Calculator">
  <operation name="addValues" parameterorder="arg0 arg1">
<input message="tns:addValues">
<output message="tns:addValuesResponse"></output>
</operation>
</porttype>
[...]

Implementation des WebService Clients

Bisher haben Sie die wichtigsten Informationen bekommen, um einen WebService-Dienst zu entwickeln. Für den programmatischen Zugriff auf diesen Dienst möchten wir jetzt aus der publizierten WSDL-Datei die benötigten Service-Klassen generieren, die wir für unseren Client benötigen. Rufen Sie dazu, im Source-Verzeichnis eines zweiten Java-Projekts, auf der Shell den folgenden Befehl auf:

[text]wsimport -keep http://localhost:8080/calculator?wsdl[/text]

Über den -keep-Parameter werden die generierten Java-Klasse behalten und nicht nach dem Kompilieren gelöscht. Wenn der Befehl fehlerlos durchgelaufen ist finden Sie folgende vier generierten, bzw. kompilierten, Dateien vor:
[text]Calculator.java
Calculator.class
CalculatorService.java
CalculatorService.class[/text]

Jetzt, da wir das Interface und die dazugehörige Service-Klasse generiert haben, können wir uns an die Implementation des Clients machen. Auch diese gestaltet sich recht einfach, wie das folgende Codestück zeigt:

package de.theserverside.webservice.client;

import de.theserverside.webservice.service.Calculator;
import de.theserverside.webservice.service.CalculatorService;

public class CalculatorClient {
public static void main(String args[]) {
CalculatorService service = new CalculatorService();
Calculator calculator = service.getCalculatorPort();
System.out.println("Summe: " + calculator.addValues(17, 13));
}
}

Der aus der WSDL generierte CalculatorService übernimmt die Kommunikation zum Server. Ein Handle auf unseren Calculator erhalten wir über den Aufruf von getCalculatorPort(), welches wir anschließend für Zugriffe auf unsere Klasse nutzen.

Starten Sie diese Klasse und Sie erhalten die folgende Ausgabe:
[text]Summe: 30[/text]

Sourcecode zum Artikel

Die beiden Java-Projekte, den Client und den Server, können Sie hier herunterladen:
WebService in Java – Client
WebServices in Java – Server

Weiterführende Literatur

Weitere Informationen zur Implementation von WebServices in Java, hier mit dem Framework AXIS2, finden Sie in dem Buch Java Web Services mit Apache Axis2 von Thilo Frotscher, Marc Teufel und Dapeng Wang, die auch für diverse Artikel im Java Magazin verantwortlich zeichnen. Im Zusammenhang mit Service-orientierten Architekturen (SOA) werden WebServices im von Lesern sehr gut bewerteten Service-orientierte Architekturen mit Web Services: Konzepte – Standards – Praxis beschrieben.



23 Kommentare

Sie können Kommentare zu diesem Artikel über den RSS 2.0-Feed nachverfolgen. Sie können einen Kommentar hinterlassen, oder einen Trackback von Ihrer eigenen Website setzen.

WebService starten! - Enterprise Java (JEE, J2EE, Spring & Co.) @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe
Jun 20, 2008 7:42

[…] WebService starten! Morgen! Danke erst mal f?r die zahlreichen antworten! Also auf der Seite http://theserverside.de/webservice-in-java/ steht "… Bisher haben Sie die wichtigsten Informationen bekommen, um einen […]

WebService erstellen - Forum Fachinformatiker.de
Feb 18, 2009 18:44

[…] Ich denke dein Problem sollte es erstmal nicht weitere komplizierte Methoden einzubinden sondern erstmal dein Hauptproblem zu l?sen. Denn du greifst bis jetzt immer nur via SoapUI auf deinen Webservice zu. Das ist aber nicht Ziel der Veranstaltung sondern ein Client soll drauf zugreifen. Du solltest dir jetzt f?r dein einfaches Beispiel einen Client erstellen der dann den Zugriff ausf?hrt und dir dein Ergebnis liefert. Da ich immer noch nicht weiss was f?r eine Webservice Runtime du da einsetzt hier mal ein Link zu einer recht einfachen Beschreibung. WebService in Java […]

Problem beim Ver?ffentlichen von Webservices in Java - Java @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe
Mrz 17, 2009 9:53

[…] in java. Ich habe dieses Tutorial durchgearbeitet, was ?brigens sehr gut geschrieben ist: http://theserverside.de/webservice-in-java/ Das ganze funktioniert auch soweit es im Tutorial beschrieben ist. Nur m?chte ich jetzt den […]

SSL JAVA und SOAP - Enterprise Java (JEE, J2EE, Spring & Co.) @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe
Mai 5, 2009 20:58

[…] JAVA und SOAP Hi, ich hab ein kleines Problem. Ich habe mit Hilfe dieser sch?nen und einfachen Seite einen kleinen Webservice geschrieben mit dem ein Applet kommunizieren kann (Echo-Server). Gibt es […]

      |>> SOAP
Sep 24, 2009 13:34

[…] auch zu “>Weblinks zu zu W3C: SOAP Specifications (englisch)XML protocol activity (englisch)Beispiel für einen WebService mit Java/SOAP Schritt-für-Schritt-Anleitung für die Implementation eines WebServices in Java mit SOAP (Stand: […]

Nachrichten an Java-Programm senden - Delphi-PRAXiS
Apr 5, 2012 13:28

[…] den passenden SOAP Request zu Fuss erstellen. Ein deutschsprachiges Beispiel ist hier zu finden: http://theserverside.de/webservice-in-java/ Michael […]

Webservice (Server Java, Client Android) - Android-Hilfe.de
Apr 23, 2012 13:03

[…] Android) naMediaAd.includeAd("MEDIUM_RECTANGLE"); Hallo, ich habe folgendes probiert: WebService in Java Wenn ich exakt das gleiche Projekt in Java erstelle und den Client ebenso in Java erstelle […]

Java Webservice – GeekLogy
Apr 30, 2012 11:32

[…] Services Developer Pack (JWSDP) Einzug in … http://www.theserverside.de/webservice-in-java – besuchen Webservice — Wikipedia Ein Webservice oder Webdienst ist eine Software-Anwendung, die mit […]

WebService in Java | zacka!
Mai 29, 2015 17:02

[…] Tutorial zu Webservices in Java: Quelle: WebService in Java […]

Using a java class from Delphi – Loitools.com
Mrz 4, 2020 2:36

Using a java class from Delphi
Feb 13, 2023 16:59

site,
Jun 16, 2023 18:17

site,

theserverside.de – WebService in Java

house
Jul 5, 2023 3:28

house

theserverside.de – WebService in Java

http://mk1bn0zbpe4rb9wi91d.kr/bbs/board.php?bo_table=custom02&wr_id=2446
Sep 6, 2023 18:00

https://vk.com/topic-216085329_49488649
Sep 26, 2023 6:05

Stye
Okt 17, 2023 5:43

Stye

theserverside.de – WebService in Java

Try This Website
Okt 31, 2023 9:03

Try This Website

theserverside.de – WebService in Java

bad credit financing
Nov 12, 2023 21:35

bad credit financing

theserverside.de – WebService in Java

kamagra oral jelly goedkoopste
Nov 27, 2023 23:25

kamagra oral jelly goedkoopste

theserverside.de – WebService in Java

b2b appointment setting
Dez 8, 2023 10:32

b2b appointment setting

theserverside.de – WebService in Java

Bonuses
Jan 5, 2024 19:35

Bonuses

theserverside.de – WebService in Java

Read More
Jan 7, 2024 0:18

Read More

theserverside.de – WebService in Java

Get More Information
Jan 7, 2024 6:44

Get More Information

theserverside.de – WebService in Java

Kommentieren

Weitere Empfehlungen:




-->

Datenbanken, Internet Technologien - Nov 19, 2009 9:24 - 0 Kommentare

Oracle WebServices im praktischen Einsatz

More In Datenbanken


Betriebssysteme - Jul 27, 2006 22:28 - 0 Kommentare

Angriff der Klone!

More In Betriebssysteme