tutorial - web service rest eclipse




Servicio web REST de Jersey, Tomcat, Eclipse y 404 (4)

He leído varias publicaciones, pero parece que no puedo resolver mi problema. También verá toneladas de mensajes muy similares a este, incluso el mismo tutorial. Incluso siguiéndolos, parece que no puedo llegar a la respuesta.

Básicamente, estoy tratando de seguir el sencillo tutorial en: http://www.vogella.com/articles/REST/

Hice algunos cambios para que sea compatible con Jersey 2.x

Estoy usando: Eclipse Tomcat 6 (Implementado / Ejecutado como dentro de Eclipse) jaxrs-ri-2.0 He habilitado la faceta JAX-RS en Eclipse

Todo se construye bien Tomcat comienza bien dentro de Eclipse. Puedo acceder a un contenido de página estático a través de:

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

Sin embargo, cuando intento acceder a mi servicio a través de:

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

Recibo un 404 con "mensaje no encontrado" y "El recurso solicitado (no encontrado) no está disponible".

Aquí está mi web.xml que se encuentra en /WebContent/WEB-INF/web.xml

<?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>

Aquí está mi clase de Java:

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> ";
  }   
} 

También tengo una biblioteca de usuarios JAX-RS configurada y referenciada que incluye todos los archivos JAX-RS.

¿Pensamientos sobre qué causaría que no se encuentre el servicio web?


Jersey 2.0 no reconoce init-param con el nombre com.sun.jersey.config.property.packages (web.xml). Intente cambiarlo a jersey.config.server.provider.packages como se describe en ServerProperties.PROVIDER_PACKAGES .


Me gustaría agregar una respuesta en esta publicación. Estuve luchando con el mismo problema durante dos días y no pude encontrar la solución. Intenté todas las posibles soluciones proporcionadas aquí, pero más tarde me di cuenta de que el servidor estaba dando error de

 org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

Este enlace responde la solución si alguien está atascado como yo .. org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

En realidad, la primera respuesta dada en esta publicación sugiere la solución que es para el paquete de jersey 2.x y si está usando jersey 1.x, seguirá dando error.

Por favor refiérase al enlace dado en respuesta para referencia adicional


Recientemente me encontré atrapado en este problema. Lo he resuelto siguiendo estos dos puntos como la solución:

  1. Al hacer que src/main/java sea ​​el directorio fuente, y manteniendo la estructura del proyecto como se muestra a continuación:

  1. Cambiar com.sun.jersey.config.property.packages a jersey.config.server.provider.packages en web.xml

Simplemente al modificar la configuración de Apache Tomcat v7.0 al crear Dynamic Web Project, para incluir REST, resolví mi problema. No está habilitado por defecto.





jersey