Java, Webprogrammierung, Linux und mehr

Java, Webprogrammierung, Linux und mehr

Virtual Home of Johannes Geppert

  • Home
  • Über mich
  • Meine Linktipps
  • Kontakt
  • Impressum

RESTful Web Services (JAX-RS) mit Jersey

Posted in Allgemein, java, webservices by jogep
Mrz 13 2009
TrackBack Address.

Durch das Jersey Projekt existieren Bibliotheken die es Java Entwicklern besonders einfach machen REST Web Services zu entwickeln. In diesem Tutorial werde ich zeigen wie einfach es ist eine Web Service zu schreiben der uns einfache Mathematische Berechnung zurückliefert.

1.)
Wir erstellen in unserer Entwicklungsumgebung, in meinem Beispiel Eclipse, ein Web Projekt.  In das WEB-INF/lib Verzeichnis packen wir alle für Jersey benötigten JARs die es bei Jersey/Downloads runterzuladen gibt.  Für dieses Tutorial benötigen wir folgende Bibliotheken: jersey-server.jar, jersey-core.jar, jsr311-api.jar, asm.jar, jaxb-impl.jar, jaxb-api.jar, activation.jar, stax-api.jar

2.)
In unserer WEB-INF/web.xml fügen wir folgendes hinzu:

  <servlet>
  	<display-name>JAX-RS REST Servlet</display-name>
  	<servlet-name>REST-Servlet</servlet-name>
  	<servlet-class>
  		com.sun.jersey.spi.container.servlet.ServletContainer
  	</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>REST-Servlet</servlet-name>
  	<url-pattern>/services/*</url-pattern>
  </servlet-mapping>

3.)
Wir erstellen zwei Klassen die wir für unser Ergebniss benötigen.

Die erste Klasse MathResults kapselt unsere Mathematischen Ergebnisse.

package de.wstest;
 
public class MathResults {
	private String formel;
	private Integer ergebniss;
	public String getFormel() {
		return formel;
	}
	public void setFormel(String formel) {
		this.formel = formel;
	}
	public Integer getErgebniss() {
		return ergebniss;
	}
	public void setErgebniss(Integer ergebniss) {
		this.ergebniss = ergebniss;
	}
}

Und die zweite Klasse ServiceResult ist das Result unseres WebService

package de.wstest;
 
import java.util.List;
 
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement
public class ServiceResult {
	private String message;
	private Integer returncode;
	private List<MathResults> ergebnisse;
 
	public Integer getReturncode() {
		return returncode;
	}
	public void setReturncode(Integer returncode) {
		this.returncode = returncode;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
 
	public List<MathResults> getErgebnisse() {
		return ergebnisse;
	}
	public void setErgebnisse(List<MathResults> ergebnisse) {
		this.ergebnisse = ergebnisse;
	}
}

4.)
Jetzt erstellen wir eine weitere Klasse CalculatorService, diese ist unser eigentlicher Webservice und wird durch Annotions als dieser gekennzeichnet. Ein gute Übersicht über zulässige Annotions findet Ihr im Wiki von Jersey.

package de.wstest;
 
import java.util.LinkedList;
import java.util.List;
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
 
@Produces("application/xml")
@Path("calculator")
public class CalculatorService {
 
	@GET
	@Path("calc")
	@Produces("application/xml")
	public ServiceResult add(@QueryParam("a") Integer a, @QueryParam("b") Integer b) {
 
		ServiceResult r = new ServiceResult();
		List<MathResults> ergs = new LinkedList<MathResults>();
 
		if(a == null || b == null)
		{
			r.setMessage("No Values!");
			r.setReturncode(8);
			r.setErgebnisse(ergs);
			return r;
		}
 
		r.setMessage("Results for Value a = "+a+", Value b = "+b);
		r.setReturncode(0);
		MathResults e1 = new MathResults();
		e1.setFormel("a + b");
		e1.setErgebniss(a+b);
		MathResults e2 = new MathResults();
		e2.setFormel("a - b");
		e2.setErgebniss(a-b);
		MathResults e3 = new MathResults();
		e3.setFormel("a * b");
		e3.setErgebniss(a*b);
 
		ergs.add(e1);
		ergs.add(e2);
		ergs.add(e3);
 
 
		r.setErgebnisse(ergs);
		return r;
	}
}

Fertig ist unsere RESTFull Webservice. Nach dem deployen in einem ServletContainer wie Tomcat erhalten wir nach einem Aufruf des Webservices im Browser

http://localhost:8080/wstest/services/calculator/calc?a=234&b=456

folgendes Ergebniss:

<serviceResult>
	<ergebnisse>
		<ergebniss>690</ergebniss>
		<formel>a + b</formel>
	</ergebnisse>
	<ergebnisse>
		<ergebniss>-222</ergebniss>
		<formel>a - b</formel>
	</ergebnisse>
	<ergebnisse>
		<ergebniss>106704</ergebniss>
		<formel>a * b</formel>
	</ergebnisse>
	<message>Value a = 234, Value b = 456</message>
	<returncode>0</returncode>
</serviceResult>

Durch einen Aufruf der URL

http://localhost:8080/wstest/services/application.wadl

erhalten wir eine Übersicht über unsere Services und deren Parameter.

<application xmlns="http://research.sun.com/wadl/2006/10">
    <doc xmlns:jersey="http://jersey.dev.java.net/" jersey:generatedBy="Jersey: 1.0 10/13/2008 12:27 PM"/>
    <resources base="http://localhost:8080/wstest/services/">
        <resource path="calculator">
            <resource path="calc">
                <method name="GET" id="add">
                    <request>
                        <param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:int" style="query" name="a"/>
                        <param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:int" style="query" name="b"/>
 
                    </request>
                    <response>
                        <representation mediaType="application/xml"/>
                    </response>
                </method>
            </resource>
        </resource>
    </resources>
</application>

Fertig ist in wenigen Schritten unser REST Web Service der uns eine Liste von Berechnungen für einen Eingabe zurückliefert.

Bookmark:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • blogmarks
  • email
  • Furl
  • MisterWong
  • MisterWong.DE
  • MySpace
  • Spurl
  • StumbleUpon
  • Technorati
  • Yahoo! Buzz
  • YahooMyWeb
  • Yigg
  • LinkArena
Tagged as: java, jax-rc, jersey, rest, web service, webservice
Trackbacks
  • Java, Webprogrammierung, Linux und mehr sagt:
    25. Mai 2009 um 14:19

    Java Client für REST WebService (JAX-RS)…

    Nach dem erstellen eines REST WebServices mit JAX-RS habe ich schon einen Beispiel für einen PHP Client eines WebServices gegeben. Natürlich lässt sich der REST WebService auch mit Java excellent verarbeiten. Wie das geht werde ich in einem klei…

Kommentare
  • Hegel:

    Sehr gutes Tutorial.

    Antworten 8. Mai 2009 um 20:33
  • jogep:

    Und hier gibt es den passenden PHP Client:

    http://www.jgeppert.com/2009/05/php-client-rest-webservice/

    Antworten 13. Mai 2009 um 12:30
  • jogep:

    Den Client um den WebService mit Java abzufragen gibt es hier:
    http://www.jgeppert.com/2009/05/java-client-fuer-restful-web-services/

    Antworten 25. Mai 2009 um 14:36
  • RestWebServicePadawan:

    Zitat: “Nach dem deployen in einem ServletContainer wie Tomcat….”, wie schaut dieser Deployvorgang aus? bzw. wie deployt man diesen WebService im Glassfish?

    lg

    Antworten 2. Juni 2009 um 17:18
    • jogep:

      Deine Entwicklungsumgebung sollte dir eine WAR-Datei oder eine EAR Datei erstellen können. Das kommt auf dein Projekt an. Wie man dann deployed hängt vom ServletContainer/Applicationserver ab.

      Beim Tomcat einfach die Datei in den TOMCAT_HOME/webapps Ordner ablegen.
      http://tomcat.apache.org/tomcat-5.5-doc/deployer-howto.html

      Beim Classfish gibt es da verschiedene Wege:
      https://glassfish.dev.java.net/javaee5/deployment/index.html

      Antworten 3. Juni 2009 um 12:17
    • auch ein Padawan:

      Könntest du mir auch noch einmal sagen, wie ich das dann deploye?
      danke =)

      Antworten 1. September 2009 um 08:41
      • auch ein Padawan:

        ach so ein mist – hier gibt es ja das +-Zeichen *gg*
        danke dann lese ich mir das mit dem deployen durch – danke

        Antworten 1. September 2009 um 08:41
      • jogep:

        Exportiere dein Anwendung die du z.B. in Eclipse erstellt hast einfach als WAR-Datei (in Eclipse –> Export… –> Web –> WAR file) und kopiere die WAR Datei in den Deploy Pfad deines Anwendungsservers, bei Tomcat ist das dann das Verzeichnis webapps.

        Antworten 1. September 2009 um 09:48
  • RestWebServicePadawan:

    Hi danke für die schnelle Antwort und ja das mitn deploy-Vorgang ist auch kein Problem, eine Frage hätt ich noch, wie ist es möglich, dass ich dem WebService Objekte von eigenen definierten Klassen übergebe? also keine Longs Strings etc…

    Antworten 7. Juni 2009 um 11:00
    • jogep:

      Meines Wissens kannst du bei REST WebServices nur mit einfachen Datentypen wie String, Integer und Long arbeiten. Wenn du komplexe Parameter brauchst solltest du dir die SAOP basierten WebServices ansehen.

      Antworten 9. Juni 2009 um 09:14
  • david:

    Cooles Tutorial! Danke!

    Antworten 13. Oktober 2009 um 08:11
Hinterlasse einen Kommentar
Hier klicken, um die Antwort abzubrechen.

Please copy the string CF2KwZ to the field below:

Social Links

TwitterTwitter XingXing TechnoratiTechnorati GithubGithub

Kategorien

  • Allgemein
  • datenbanken
  • hdr
  • java
    • sap
    • spring
    • struts2
    • hibernate
    • axis2
    • webservices
    • Struts jQuery Plugin
  • linux
  • projekte
  • sonstiges
  • witze
  • jQuery
  • php
  • piratenpartei

Schlagwörter

ajax Array bilder checksum client e-mail email gallerie hdr hdr bild hdr bilder hibernate integration java jax-rc jersey jpeg jqgrid jQuery leipzig linux mail openSUSE options Photo php plugin properties qtpfsgui resize rest showcase smtp spring struts2 versenden video web gallerie web service webservice wein weinfreund weingut widgets witze

Archiv

  • März 2010 (1)
  • Januar 2010 (4)
  • Dezember 2009 (1)
  • November 2009 (1)
  • Oktober 2009 (1)
  • September 2009 (1)
  • August 2009 (1)
  • Juli 2009 (2)
  • Juni 2009 (4)
  • Mai 2009 (5)
  • April 2009 (1)
  • März 2009 (2)
  • Februar 2009 (2)
  • Januar 2009 (1)
  • September 2008 (1)
  • Juli 2008 (22)

Meta

  • Anmelden
  • Artikel-Feed (RSS)
  • Kommentare als RSS
  • WordPress.org



Add to Technorati Favorites
Technorati Profile
Programming Blog Directory
Programming Blogs - Blog Catalog Blog Directory

blogoscoop
Blogverzeichnis - Blog Verzeichnis bloggerei.de
BlogPingR.de - Blog Ping-Dienst, Blogmonitor
Blog Verzeichnis Social Bookmarking, RSS-Verzeichnis
Blog Top Liste - by TopBlogs.de
http://www.wikio.de
Technology Blogs - Blog Rankings

RSS Neues aus der Weinwelt

  • Wein, Jazz & Oldtimer - das stimmungsvolle Weinfest im Grünen
  • Weinmesse München am 13. und 14. März 2010
  • saborondo Wintermenü - Die perfekte Harmonie von Speisen und Wein
  • XXV. Hamburger Wein-Salon
  • Weingut Kummer-Schuster jetzt NEU bei weinfreund.de
  • Konsumgöttinnen
  • HM4 - der Jungwein des Hauses ist da!
  • Es wei(h)nachtet sehr...
  • Auszeichnungen im Fallstaff Weinguide 2009/2010
  • Weingut Müller-Grossmann jetzt NEU bei weinfreund.de
Powered by WordPress | “Blend” from Spectacu.la WP Themes Club