Definindo Mapeadores de Exceção para Exceções e Erros de Recurso

Os aplicativos Java™ API for RESTful Web Services (JAX-RS) podem produzir exceções e erros. O comportamento padrão é usar a funcionalidade de manipulação de exceção do contêiner de aplicativo, como páginas de erro JavaServer Pages (JSP). Entretanto, é possível customizar a manipulação de erro e enviar respostas específicas de volta quando uma exceção ou erro ocorrer.

Sobre Esta Tarefa

Os métodos de recursos JAX-RS, como qualquer método Java, pode emitir exceções verificadas e não verificadas. Por padrão, uma exceção de tempo de execução ou erro não verificado ocorre no contêiner novamente. Uma exceção verificada é agrupada em uma ServletException para os recursos em execução no contêiner da Web. Portanto, um desenvolvedor pode usar os recursos de manipulação de erro, como páginas de erro JSP, para manipular exceções emitidas a partir de um aplicativo JAX-RS.

O JAX-RS introduziu uma exceção, javax.ws.rs.WebApplicationException. Um desenvolvedor pode especificar um nome de classe de erro específico ou um objeto javax.ws.rs.core.Response quando criar uma WebApplicationException. Quando a WebApplicationException é emitida, as informações incluídas na exceção por meio de um nome de classe de status ou de objeto de Resposta são usadas para serializar uma resposta.

Se não for possível emitir a exceção WebApplicationException no seu código e os recursos de manipulação de erro não puderem ser usados no contêiner da Web, mas desejar usar uma resposta de erro customizada, será possível criar uma classe javax.ws.rs.ext.ExceptionMapper JAX-RS para mapear as exceções para as respostas de erro HTTP.

O seguinte procedimento ilustra como gravar uma classe ExceptionMapper customizada.

Procedimento

  1. Crie uma classe que implementa a classe javax.ws.rs.ext.ExceptionMapper e anote a classe com a anotação javax.ws.rs.ext.Provider. Essa etapa assume que seu recurso JAX-RS pode emitir a exceção MyCustomException nos seus métodos. O exemplo a seguir ilustra uma classe ExceptionMapper simples:
    import javax.ws.rs.core.Response;
    import javax.ws.rs.ext.ExceptionMapper;
    import javax.ws.rs.ext.Provider;
    
    @Provider
    public class CustomExceptionMapper implements ExceptionMapper<MyCustomException> {
    
        public Response toResponse(MyCustomException exception) {
            return null;
        }
    
    }
  2. No método toResponse(MyCustomException), retorne um objeto Response que contenha a resposta de erro customizada. O exemplo a seguir ilustra um método ExceptionMapper.toResponse(MyCustomException) customizado:
    @Provider
    public class CustomExceptionMapper implements ExceptionMapper<MyCustomException> {
    
        public Response toResponse(MyCustomException exception) {
            return Response.status(500).entity("Unfortunately, the application cannot
                process your request at this time.").type("text/plain").build();
        }
    
    }
    É possível ter código adicional onde um erro é registrado, a exceção emitida é inspecionada ou a lógica mais complexa é usada.
  3. Compacte a classe ExceptionMapper customizada compilada com seu projeto de aplicativo da Web. Se você depender dos recursos de varredura de anotação para localizar todas as classes JAX-RS no seu aplicativo da Web, nenhuma etapa adicional será necessária. Entretanto, se você retornar todas as classes e provedores de recurso JAX-RS relevantes em um método de subclasse de aplicativo JAX-RS, deverá também incluir a classe ExceptionMapper customizada no conjunto retornado. O exemplo a seguir ilustra uma subclase javax.ws.rs.core.Application pré-existente:
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.ws.rs.core.Application;
    
    public class MyApplication extends Application {
    
        @Override
        public Set<Class<?>> getClasses() {
            Set<Class<?>> classes = new HashSet<Class<?>>();
            classes.add(CustomExceptionMapper.class);
            /* add your additional JAX-RS classes here */
            return classes;
        }
    }

    Quando ocorrerem exceções no seus métodos de recursos JAX-RS, poderá customizar a resposta de erro HTTP para que um usuário não possa ver um rastreio de pilha ou dados potencialmente confidenciais. Use um ExceptionMapper ou um recurso de manipulação de exceção no contêiner da Web para fornecer respostas mais úteis se o aplicativo não estiver se comportando corretamente.

Resultados

Uma ExceptionMapper customizada foi gravada para manipular exceções no seu aplicativo da Web JAX-RS.


Ícone que indica o tipo de tópico Tópico de Tarefa



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_defresource_exception_mapper
Nome do arquivo: twbs_jaxrs_defresource_exception_mapper.html