Pergunta

Considere o seguinte serviço simples (JAX-RS):

@Path("/example-service")
public interface ExampleService {

    @Path("/ping")
    @GET
    public String ping(String message);

}

Quero definir específicos do JAXRS na interface, em vez da classe, para que eu possa usar a bela estrutura do cliente, ou seja::

ExampleService client = ProxyFactory.create(ExampleService.class, "http://localhost:8080");

Tudo funciona bem, exceto quando eu quero apresentar algumas das injeções de contexto de Restasy, ou seja: @Context. Ingenuamente, considere o seguinte:

@Path("/example-service")
public interface ExampleService {

    @Path("/ping")
    @GET
    public String ping(@Context HttpServletRequest request, String message);

}

Obviamente, isso não faz sentido porque essa injeção @Context é ortogonal e não pertence à interface (além disso, mesmo que eu possa superar a feiura dessa interface da perspectiva do cliente e passar nula, atualmente há um bug que impede isso de trabalhar: Restasy-311)

Como posso usar a marcação da interface JAXRS (e, portanto, aproveitar a estrutura do cliente de Restasy) e acessar injeções ortogonais @Context ao mesmo tempo?

Foi útil?

Solução

Como essa pergunta é formulada, isso pode ser facilmente resolvido com uma injeção de campo @Context na implementação. O que complicou essa situação em particular foi o uso da "integração EJB" de Restasy, que recupera a implementação do JNDI. Esta solução ainda não realiza injeções de repouso adicionais na implementação recuperada do contêiner EJB. Tudo isso será mais fácil com a próxima integração JEE6/JAXRS.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top