REST mit Jersey unter Mac OSX

UplinkIch beschäftige mich gerade mit RESTful Webservices und frickel gerade so ein wenig mit Java und Eclipse rum. Bei Lars Vogel habe ich ein sehr schönes Tutorial gefunden, wie man RESTful Webservices mit Java und Jersey umsetzen kann. Hier sind noch ein paar meiner Notizen, um das ganze auf Mac OSX (Snow Leopard) ans Laufen zu bringen.

Was wir brauchen:

  • Eclipse mit Web Development Toolkit (WDT)
  • Tomcat als Servlet-Container
  • Jersey-Jars

1. Tomcat aufsetzen

  1. Tomcat-Paket herunterladen und entpacken – ich habe Tomcat 6.0 installiert
  2. testen, ob Tomcat läuft. Dazu muss zunächst die Variable $JAVA_HOME
    gesetzt werden. Wo befindet sich die Installation des vom Betriebssystem mitgebrachten JDKs? Das lässt sich einfach herausfinden, in dem man im Terminal den Befehl /usr/libexec/java_home
    eintippelt – das gibt den Pfad zur Java-Installation aus (siehe Apples Technical Q&A QA1170). Mittels export JAVA_HOME="<hier den Pfad angeben, den der java_home-Befehl ausgegeben hat" wird die Variable $JAVA_HOME gesetzt. Anschließend kann mittels $TOMCAT_DIR/bin/startup.sh der Tomcat-Server gestartet werden ($TOMCAT_DIR ist hier keine Variable, sondern ein Platzhalter für den Ort deiner Tomcat-Installation). Mit dem Browser kann man dann zu http://localhost:8080 surfen und gucken, ob die Tomcat-Startseite angezeigt wird. Alles OK? Dann weiter zu Stufe 2.

2. Eclipse Web Development Tools installieren

  1. Eclipse starten
  2. Help → Install new software
  3. Software-Site des Eclipse-Releases auswählen (bei mir Galileo)
  4. alle Pakete aus „Web, XML und Java EE Development“ außer PHP Development Tools selektieren und installieren (und ggf. Eclipse neu starten). Wenn alles funktioniert hat, geht’s weiter zu Schritt 3.

3. Projekt in Eclipse anlegen

  1. New Project → Web → Dynamic Web Project
  2. Projekt-Name: HelloJersey
  3. Unter Target Runtime → New die passende Tomcat-Version auswählen und die Pfad zur vorherigen Tomcat-Installation angeben
  4. Projekt anlegen
  5. zip-Archiv mit den Jersey-Jars herunterladen (http://download.java.net/maven/2/com/sun/jersey/jersey-archive/1.4/jersey-archive-1.4.zip) und entpacken
  6. Jars aus dem Jersey-Archiv nach WebContent/WEB_INF/lib (unterhalb des Eclipse-Projekts) kopieren.

4. Java-Klasse anlegen

  • New → Class
  • Klasse mit dem Namen Hello anlegen und folgenden Content reinkopieren (aus Lars‘ Tutorial)
package HelloPackage

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

// POJO, no interface no extends

//Sets the path to base URL + /hello
@Path("/hello")
public class Hello {

	// This method is called if TEXT_PLAIN is request
	@GET
	@Produces(MediaType.TEXT_PLAIN)
	public String sayPlainTextHello() {
		return "Hello Jersey";
	}

	// This method is called if XMLis request
	@GET
	@Produces(MediaType.TEXT_XML)
	public String sayXMLHello() {
		return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" +
                "</hello>";
	}

	// This method is called if HTML is request
	@GET
	@Produces(MediaType.TEXT_HTML)
	public String sayHtmlHello() {
		return "<html> " + "<title>" + "Hello Jersey" + "</title>"
				+ "<body><h1>" + "Hello Jersey" + "</body>
                                   </h1>" + "</html> ";
	}

}

5. Jersey Servlet Dispatcher

Damit Tomcat weiß, was er wie mit REST-Anfragen tun soll, muss ein Servlet Dispatcher angelegt werden:

  1. Datei WebContent/WEB_INF/web.xml öffnen
  2. Inhalt mit folgendem ersetzen:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         id="WebApp_ID" version="2.5">
  <display-name>Hello</display-name>
  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>
           com.sun.jersey.spi.container.servlet.ServletContainer
    </servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>HelloPackage</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

Der Wert des Parameters
com.sun.jersey.config.property.packages entspricht dem Paketnamen mit Eurer Hello-Klasse, also HelloPackage.

*trommelwirbel* jetzt wird’s spannend

6. Service starten

Im Eclipse auf den grünen Play-Button klicken („Run on server“), den Tomcat auswählen und los geht’s. Wenn ihr alles richtig gemacht habt, sollte Euch Euer Browser unter http://localhost:8080/JerseyExample/rest/hello mit einem fröhlichen „Hello Jersey“ begrüßen.

[photo credits: LordFerguson]

Kommentar verfassen