wake-up-neo.com

Jersey REST Webservice, Tomcat, Eclipse und 404's

Ich habe eine Reihe von Beiträgen gelesen, kann aber mein Problem einfach nicht lösen. Sie werden auch Tonnen von Beiträgen sehen, die diesem ähnlich sind, sogar das gleiche Tutorial. Selbst wenn ich ihnen folge, scheint ich nicht zur Antwort zu kommen.

Im Wesentlichen versuche ich, das einfache Tutorial unter: http://www.vogella.com/articles/REST/ zu verfolgen.

Ich habe ein paar Änderungen vorgenommen, um es mit Jersey 2.x kompatibel zu machen

Ich benutze: Finsternis Tomcat 6 (bereitgestellt/innerhalb von Eclipse ausgeführt) jaxrs-ri-2.0 Ich habe die JAX-RS-Facette in Eclipse aktiviert

Alles baut gut auf Tomcat beginnt gut mit Eclipse Ich kann auf einen statischen Seiteninhalt zugreifen: 

http://localhost:8080/RestTEST2/index.html

Wenn ich jedoch versuche, auf meinen Dienst zuzugreifen, über: 

http://localhost:8080/RestTEST2/jaxrs/hello 

Ich erhalte eine 404 mit "Nachricht nicht gefunden" und "Die angeforderte Ressource (Nicht gefunden) ist nicht verfügbar."

Hier ist meine web.xml, die sich unter /WebContent/WEB-INF/web.xml befindet

<?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" 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>TestREST2</display-name>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
  <description>JAX-RS Tools Generated - Do not modify</description>
  <servlet-name>JAX-RS Servlet</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.Sun.jersey.config.property.packages</param-name>
      <param-value>TestREST</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>  
  </servlet>
    <servlet-mapping>
      <servlet-name>JAX-RS Servlet</servlet-name>
      <url-pattern>/jaxrs/*</url-pattern>
    </servlet-mapping>
</web-app>

Hier ist meine Java-Klasse:

package TestREST;

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

// Plain old Java Object it does not extend as class or implements 
// an interface

// The class registers its methods for the HTTP GET request using the @GET annotation. 
// Using the @Produces annotation, it defines that it can deliver several MIME types,
// text, XML and HTML. 

// The browser requests per default the HTML MIME type.

//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 XML is 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> ";
  }   
} 

Ich habe auch eine JAX-RS User Library konfiguriert und referenziert, die alle JAX-RS-Gläser enthält.

Gedanken darüber, was den Webdienst nicht finden würde?

25
Jason Allen

Jersey 2.0 erkennt init-param mit dem Namen com.Sun.jersey.config.property.packages (web.xml) nicht. Versuchen Sie, es in jersey.config.server.provider.packages zu ändern, wie in ServerProperties.PROVIDER_PACKAGES beschrieben.

25
Michal Gajdos

Vielen Dank. Ich habe auch dafür gekämpft.

Diese Kombination hat für mich funktioniert: Tomcat 7.0.55 Eclipse LunaJava 1.6 Jersey 1.7

web.xml:

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.trgr.cobalt.cmdb.jersey.resource;com.trgr.cobalt.cmdb.jersey.beans;com.trgr.cobalt.cmdb.elasticity</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>
4
Suren Konathala

Ich möchte in diesem Beitrag eine Antwort hinzufügen. Ich hatte zwei Tage lang mit dem gleichen Problem zu kämpfen und konnte keine Lösung finden .. Ich habe alle möglichen Lösungen ausprobiert, die hier bereitgestellt wurden

 org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

Dieser Link beantwortet die Lösung, wenn jemand wie ich stecken bleibt .. org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

Eigentlich schlägt die erste Antwort in diesem Beitrag die Lösung vor, die für das Trikot 2.x-Bündel gilt. Wenn Sie Trikot 1.x verwenden, wird es weiterhin Fehler geben.

Bitte beziehen Sie sich auf den in der Antwort angegebenen Link für weitere Hinweise

3
spt025

Durch das Ändern der Konfiguration von Apache Tomcat v7.0 während der Erstellung von Dynamic Web Project, um REST einzuschließen, habe ich mein Problem gelöst. Sie ist standardmäßig nicht aktiviert.

0

Vor kurzem bin ich in dieses Problem geraten. Ich habe es gelöst, indem ich diese beiden Punkte als Lösung befolge:

  1. Legen Sie src/main/Java als Quellverzeichnis fest und behalten Sie die Projektstruktur wie folgt bei:

 enter image description here

  1. com.Sun.jersey.config.property.packages in jersey.config.server.provider.packages im web.xml ändern
0