Recurso JAX-RS não encontrado no GlassFish Server

Eu tenho tentado criar um simples WebService Restful, usando o NetBeans Ide.
Minha versão do Java EE é: Java EE 7 Web.

Eu criei um novo Java Web Application, definindo este ContexPath: /DukesAgeService .

Agora, executando meu aplicativo, o navegador exibe minha página Index.html em:

http://localhost:8080/DukesAgeService/

então tudo funciona bem.

Em seguida, tentei criar um recurso repousante simples usando o Assistente de serviço da Web RESTful.

Então, criei esta class:

 package firstcup.webservice; import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PUT; /** * REST Web Service * * @author nolanof */ @Path("dukesAge") public class DukesAgeResource { @Context private UriInfo context; /** * Creates a new instance of DukesAgeResource */ public DukesAgeResource() { } /** * Retrieves representation of an instance of firstcup.webservice.DukesAgeResource * @return an instance of java.lang.String */ @GET @Produces("text/plain") public String getText() { return "hello world"; } } 

Mas executando o meu aplicativo, na url: http://localhost:8080/DukesAgeService/dukesAge eu recebo uma página 404 não encontrada.

Eu expliquei que qualquer solicitação get de input que tenha o url de "/dukesAge" foi manipulada pelo método getText class getText . O que está errado?

obrigado

Você provavelmente está perdendo o servlet do aplicativo JAX-RS. Você pode defini-lo no web.xml ou, se quiser ir xml-less, pode usar uma subclass Application . A maneira mais fácil é simplesmente usar a subclass Application anotada com @ApplicationPath . Um servlet será criado e o caminho do servlet será definido no valor da anotação. Algo como

 @ApplicationPath("/rest") public class RestApplication extends Application { // All request scoped resources and providers @Override public Set> getClasses() { Set> classs = new HashSet<>(); classes.add(DukesAgeResource.class); return classes; } // all singleton resources and providers @Override public Set getSingletons() { Set singletons = new HashSet<>(); return singletons; } } 

Então o recurso deve acessar o recurso via

http://localhost:8080/DukesAgeService/rest/dukesAge .

Existem outras maneiras, mas esta é a maneira portátil. O Glassfish usa Jersey, mas a criação de um aplicativo da Web Java EE a partir do zero no Netbeans só importará classs padrão do Java EE de tempo de compilation (sem dependencies Jersey). Então, o acima é realmente sua aposta para começar.

Você pode ver outras opções de implantação na Documentação de Jersey . Para algumas das opções, você pode precisar adicionar algumas dependencies de tempo de compilation de Jersey. É por isso que acabei de mencionar o acima. Nenhum outro flask é necessário.

Outra coisa que causaria um erro 404 seria se você especificasse o caminho do servlet JAX-RS como /* . Isso entrará em conflito com o servlet padrão que serve os resources estáticos, como suas páginas html. É por isso que eu configuro para /rest .


ATUALIZAR

Também é declarado na especificação JAX-RS que, se houver conjuntos vazios retornados em getClasses() e getSingletons() , a varredura de pacote implícita deve ocorrer. (provedor) As classs anotadas com @Provider serão adicionadas por padrão como singletons e as classs de recurso anotadas com @Path serão objects por requisição (significando que um novo object é criado em cada requisição). Então você poderia alternativamente apenas ter

 @ApplicationPath("/rest") public class RestApplication extends Application { // Left empty } 

E isso deve funcionar da mesma forma.

Você pode ter inicializado algum caminho em seu web.xml, provavelmente é por isso que você está recebendo um erro 404 enquanto liga para o serviço. Verifique seu web.xml e, caso ele esteja configurado para qualquer coisa, em vez disso *, por favor, anexe-o à sua chamada de serviço para que ele funcione.

    Intereting Posts