No REST

Hallo zusammen, da sich ja jetzt hier das Know-How versammelt hat, bin ich mal hinterher gewandert.
Folgendes Problem stellt sich mir zur Zeit:
Als Einstieg in REST-Services habe ich mich mal an diesem Tutorial probiert. War auch eigentlich recht einfach nachzuvollziehen. Allerdings läuft der Service nicht, und ich habe keine Ahnung, woran das liegen könnte. Hier mal kurz die zwei Dateien, die ich dazu erzeugt habe:
Java-Klasse:

package de.horst;

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

@Path("/hello")
public class Hello
{
	@GET
	@Produces(MediaType.TEXT_PLAIN)
	public String sayPlainTextHello()
	{
		return "Hello Jersey";
	}
	
	@GET
	@Produces(MediaType.TEXT_XML)
	public String sayXMLHello()
	{
		return "<?xml version=\"1.0\"?><hello> Hello Jersey" + "</hello>";
	}
	
	@GET
	@Produces(MediaType.TEXT_HTML)
	public String sayHtmlHello()
	{
	  return "<html><title>Hello Jersey</title><body><h1>Hello Jersey</body></h1></html>";
	}
}

web.xml:
[XML]

<?xml version="1.0" encoding="UTF-8"?> test Jersey REST Service org.glassfish.jersey.servlet.ServletContainer com.sun.jersey.config.property.packages de.horst 1 Jersey REST Service /rest/* [/XML] Gegenüber dem Tutorial habe ich in der web.xml den Parameter servlet-class geändert, da Tomcat(7) die Klasse nicht finden konnte und eine NPE warf. Anscheinend wurde das von Oracle neu gepackt. Ein Aufruf von http://localhost:8080/test/rest/hello gibt mir momentan nur den Fehler 404 aus. Was mache ich falsch?

So, erster in dieser Kategorie! :stuck_out_tongue:

Wie heißt denn dein Projekt?,… Heißt es “test”?
Ansonsten versuch mal “http://localhost:8080/“projektname”/rest/hello

Dann kannst du auch nochmal ins Server-Log schauen, ob da sowas ähnliches steht:

INFO: Scanning for root resource and provider classes in the packages:
  de.horst
INFO: Root resource classes found:
  class de.horst.Hello

ps. ich habs jetzt nur mal kurz mit Glassfish und “com.sun.jersey.spi.container.servlet.ServletContainer” gemacht. Ansonsten schau ich morgen nochmal.

Ja, mein Projekt heißt test. Die entsprechenden Infos habe ich im Server-Log leider nicht entdeckt, dafür folgendes:
validateJarFile(C:\Dokumente und Einstellungen\Hobel\javaprojects\JermannWeb\Tom7\wtpwebapps\Test\WEB-INF\lib\javax.servlet-api-3.1.0.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

Ich werde das morgen mal mit einem anderen Server probieren, Glassfish würde sich ja anbieten.
Danke auch, ich leg mich jetzt auch erst mal schlafen, sowas nervt…

Da dein Projekt anscheinend Test heißt und nicht test, schon einmal mit großem T in der URL probiert?

Ansonsten, besagt der Fehler, dass du das servlet.jar einmal in WEB-INF/lib hast obwohl es schon vom Tomcat mitgeliefert wird.

Ob groß, ob klein, Tomcat mag beides nicht. Die Ausgabe oben stammt aus einem dieser Versuche.
Das mit dem servlet-api.jar ist mir heute morgen auch schon aufgefallen, und ich habe darauf hin ein paar Versuche gestartet:

  1. Die javax.servlet-api-3.1.0.jar aus dem WEB-INF/lib Verzeichnis gelöscht. Tomcat startet aber der Service funzt trotzdem nicht. Diese jar stammt aus dem Jersey-Paket.
  2. Die servlet-api.jar von Tomcat mit der obigen jar ersetzt. Tomcat startet gar nicht mehr und gibt massig Fehlermeldungen aus.
    Ich werde jetzt noch versuchen, diese servlet-jar von Jersey in den Tomcat-Ordner zu packen und einfach mal umbenennen, mal sehen, was passiert…
    Edit:
    Tomcat spuckt folgendes aus:
    WARNING: Could not get url for /javax/servlet/resources/j2ee_1_4.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_5.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_6.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/xml.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/XMLSchema.dtd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/datatypes.dtd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_2.dtd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_3.dtd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_4.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_5.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_3_0.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-common_3_0.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-fragment_3_0.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_client_1_1.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_1_2.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_client_1_2.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_1_3.xsd
    Aug 02, 2013 11:11:53 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_client_1_3.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/j2ee_1_4.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_5.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_6.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/xml.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/XMLSchema.dtd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/datatypes.dtd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_2.dtd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_3.dtd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_4.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_5.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_3_0.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-common_3_0.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-fragment_3_0.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_client_1_1.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_1_2.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_client_1_2.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_1_3.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_client_1_3.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/j2ee_1_4.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_5.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_6.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/xml.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/XMLSchema.dtd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/datatypes.dtd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_2.dtd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_3.dtd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_4.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_2_5.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-app_3_0.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-common_3_0.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/web-fragment_3_0.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_client_1_1.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_1_2.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_client_1_2.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_1_3.xsd
    Aug 02, 2013 11:11:54 AM org.apache.catalina.startup.DigesterFactory register
    WARNING: Could not get url for /javax/servlet/resources/javaee_web_services_client_1_3.xsd

Also Jersey 1.x und Tomcat 7 läuft bei mir ohne Probleme. Libs in web-inf/lib. Starten und fertig.

Mit Jersey 2.x und Tomcat 7 hab ich gerade selber ein wenig Probleme :slight_smile:

Hast Du sonst vielleicht mal ein Rest-Archetype probiert? Ich finde so etwas beim Test von neuen Technologien immer sehr hilfreich.

Siehe: http://docs.oracle.com/cd/E19226-01/820-7627/giqdq/

Ja, Jersey 2 und Tomcat scheinen sich nicht zu mögen. Und Glassfish 4 hat wohl einen Bug bezüglich Google Guava, funzt also ebenfalls nicht, falls das einer versuchen möchte. Um zu dieser Erkenntnis zu gelangen, habe ich gestern den halben Tag verpulvert. Sowas frustriert, weil ich eine gewisse Problemstellung habe und mich lange durch Foren (das tote Java-Forum z.B.), Bücher und Tuts gequält habe und glaubte, mit REST den Lösungsansatz dafür gefunden zu haben. Ich finde diese ganzen EE-Geschichten sowieso ziemlich verwirrend und möchte bzw. kann einfach von meinem Intellekt her nicht alles auf einmal angehen, mir fehlen da also noch sehr viele Basics. Ich möchte auch nicht einfach wieder auf veraltete Versionen von Irgendwas zugreifen, da das angestrebte Projekt
[ul]
[li]sehr lange laufen soll
[/li][li]ich wahrscheinlich bis zur Fertigstellung noch ein halbes Jahr benötige.
[/li][/ul]
Mein weiteres Vorgehen wird also folgendermaßen aussehen:
Ich habe mir erst mal ein Buch über Maven bestellt, da es damit wohl möglich sein soll, sich Workarounds für die bestehenden Probleme zu basteln. Ich muss halt doch wohl noch kleinere Schritte machen beim Aneignen dieses Zeugs, siehe oben.
Und ich werde mir die von Sym verlinkten “Archetypen” (den Begriff höre ich zum ersten Mal :o) mal anschauen und sehen, was ich damit anfangen kann. Danke auch dafür.

So, nach weiterem gegoggel bin ich jetzt auf das Restlet-Framework gestoßen. Das läuft einwandfrei wie in den “First steps” beschrieben, sowohl auf Apache 7 als auch auf Glassfish. Ich werde mich da jetzt mal reinfuchsen. Vielen Dank auch an Euch alle. Werde das hier mal als erledigt markieren.