JAX-RS, GlassFish, Eclipse. Um serviço da Web simples não funciona

Eu estou tentando executar um serviço web RESTful “Hello World” simples na minha máquina. Eu uso o Eclipse Kepler e o GlassFish 4.0. Eu sou capaz de implantar o serviço e vejo isso nas páginas de administração do GlassFish, mas quando tento acessá-lo, recebo o seguinte erro: “HTTP Status 404 – Not Found”.

Aqui o código do serviço simples:

import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; @Path("hello") public class HelloRest { @SuppressWarnings("unused") @Context private UriInfo context; /** * Default constructor. */ public HelloRest() { // TODO Auto-generated constructor stub } /** * Retrieves representation of an instance of HelloRest * @return an instance of String */ @GET @Produces("application/xml") public String getXml() { // TODO return proper representation object return "Hello REST"; } /** * PUT method for updating or creating an instance of HelloRest * @param content representation for the resource * @return an HTTP response with content of the updated or created resource. */ @PUT @Consumes("application/xml") public void putXml(String content) { } } 

Para acessar o serviço, eu tento o seguinte URL: http://127.0.0.1:8080/hello-rest/hello , onde hello-rest é o nome do projeto Eclipse e o caminho raiz sugerido pela página de administração do glassfish.

Seu código parece estar ok, então o problema é que você não definiu a URL base do seu serviço. Você precisa dizer ao JAX-RS (Jersey é a implementação no GlassFish) qual padrão de URL ele deve interceptar como seu endpoint (base url).

Uma maneira de conseguir isso é usando uma Classe de Aplicação que pode ser adicionada a qualquer pacote no projeto (você pode, alternativamente, definir o necessário em um arquivo web.xml que eu não cobrirei). O seguinte é o código:

 import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("your-base-url") public class ApplicationConfig extends Application { } 

Você usa a anotação @ApplicationPath para definir seu URL base. Você pode acessar seu serviço em http://127.0.0.1:8080/hello-rest/your-base-url/hello

 @GET @Produces("application/xml") @path("/getxml") public String getXml() { // TODO return proper representation object return "Hello REST"; } Your url should be http://localhost:8080/hello-rest/hello/getxml 

Você deve mencionar o caminho no nível do método, portanto, a solicitação é redirecionada para o método apropriado.

  • Você pode usar o SOAPUI para testar o serviço. Por favor, certifique-se de escolher o método correto.
  • Método como ‘GET’
  • Ponto final como ‘hostname: 8080’
  • Recurso como ‘hello-rest / hello / getxml’

    Se você enfrentar o mesmo problema. Anexe mais logs / exceção no console do tomcat.