Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Conseguir acessar a documentação de um serviço, sem quebrar o service

Opa! Talvez fui muito redundante no título, mas vou tentar explicar melhor aqui,

Ao configurar o web.xml do meu projeto, eu coloco na tag assim:

<url-pattern>/*</url-pattern> 

Entendo que ao fazer isso, eu estou falando que tudo que vier depois da / será serviço a ser executado. Me corrija se eu estiver errado, por favor.

Beleza?!

Criei uma documentação básica do serviço e inclui no web.xml assim:

<welcome-file-list>
        <welcome-file>documentacao.html</welcome-file>
</welcome-file-list>

Aí que vem o porém, quando acesso a url:

http://localhost:8080/meuServico/

Deveria trazer a minha documentação, mas não trás provavelmente por eu ter colocado /*

Ai fiz o teste colocando

/chamaServico/*

Funcionou, só que sempre vou ter que chamar essa URL da seguinte forma:

http://localhost:8080/meuServico/chamaServico/cupom/123

Queria saber se tem uma forma de eu configurar isso e deixar quando eu chamar a url, ele me trás a documentação.html como welcome, e se eu quiser chamar o serviço eu chamo da forma abaixo e ele já retorna para mim.

http://localhost:8080/meuServico/cupom/123

Se ficou complicado, posso tentar explicar de uma outra forma, muito obrigado pela atenção!

Valeu!!

4 respostas

Fala Kadu,

Não entendi o que seriam o meuServico e o chamaServico no contexto da sua aplicação :/

Posta o mapeamento das APIs, vai facilitar a nossa análise :)

Abraço!

Opa Otávio, obrigado por responder.

Abaixo o mapeamento no web.xml

<servlet>
        <servlet-name>BuscarEndereco</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>br.com.my.package.service</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>BuscarEndereco</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>documentacao.html</welcome-file>
    </welcome-file-list>

Abaixo a classe:

@Path("endereco")
public class EnderecoService {

    @GET
    @Path("{idCupom}/{formatar}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response buscarEnderecoService(@PathParam("idEndereco") Long idEndereco, @PathParam("formatar") int formatar) {
    //codigo omitido
    }

E tenho também o arquivo "documentacao.html" que apresenta as informações dos serviços.

A chamada do serviço é feita da seguinte forma:

http://localhost:8080/endereco/1234567890/1

Funciona perfeitamente.

Agora quando quero chamar a url:

http://localhost:8080/documentacao.html

Não funciona, provavelmente por causa do mapeamento /*. Dai não tenho a solução para isso.

Valeu.

solução!

O problema está no seu mapeamento <url-pattern>/*</url-pattern>. Você vai precisar mudar esse mapeamento para um /api, por exemplo.

Otávio, valeu!

Criei um serviço também que retorna a página HTML da documentação . Alterar o mapeamento do serviço já existente não era mais possível... Mas resolvido, valeu pela solução.