Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro 404 ao usar o recurso @Path

Oi, eu acabei colocando este tópico dentro do offtopic e não para a discussão dentro da aula, então repeti a mesma questão aqui já que não consegui alterar o topico da primeira vez que abri!... a dúvida: Estou seguindo o curso Serviços Web Rest e Addressability e criei um projeto de teste no tomcat so que ao colocar a anotação @Path("/xxx"), o @Get e o @Produces simplesmente não chego no recurso me retornando sempre 404!.. Na classe de exemplo deixei até a versão antiga comentada que estava usando @WebServlet e que funciona.. mas com esta anotação Path não vai.. oque estou fazendo de errado ?

OBS: Nem em debug eu sequer chego no método, ou seja é como se o Path não funcionasse.. quando mudo para @WebServlet e adapto a classe para receber o evento no metodo service do servlet ai chego mas com @Path não!...

package projetomiolos.services;

import java.util.List;

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

import com.thoughtworks.xstream.XStream;

import projetomiolos.dao.CategoriaDAO;
import projetomiolos.modelo.Categoria;

/**
 * Servlet implementation class AssuntoService
 */
@Path("/teste")
public class AssuntoService{
//public class AssuntoService extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public String buscar() {
        List<Categoria> listaCategorias = new CategoriaDAO().getListaCategorias();
        return new XStream().toXML(listaCategorias);
    }

//    @Override
//    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//
//        List<Assunto> assuntos = new DocumentosDAO().getAssuntos();
//
//        String acao = req.getParameter("formato");
//        String saida = "";
//        try {
//        switch (acao) {
//        case "JSON":
//            Gson gson = new Gson();
//            saida = gson.toJson(assuntos);
//            resp.setContentType("application/json");
//            break;
//        case "XML":
//            XStream xstream = new XStream();
//            xstream.alias("assunto", Assunto.class);
//            saida = xstream.toXML(assuntos);
//            resp.setContentType("application/xml");
//            break;
//        default:
//            throw new ServletException("formato especificado errado: use " + req.getRequestURI() + "?formato=JSON ou ?formato=XML");
//
//        }
//        }catch(Exception e) {
//            throw new ServletException("erro ao executar o serviço " + e.getMessage());
//        }
//        resp.getWriter().print(saida);
//    }
}
1 resposta
solução!

Achei uma solução.. mas tive de pesquisar um pouco. para o caso que criei, era necessario configurar no web.xml o mapeamnto para que o jersey funcionasse!.. segue abaixo o exemplo do que fiz para chegar no ponto.

Mas a dúvida continua.. é de fato necessário configrar este servlet no web.xml? porque no exemplo do professor não houve esta necessidade!...

 <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>projetomiolos.services</param-value>
        </init-param>

        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>