Mapper für ressourcenbezogene Ausnahmen und Fehler

JAX-RS-Anwendungen (Java™ API for RESTful Web Services) können Ausnahmen und Fehler erzeugen. Standardmäßig werden die Ausnahmebehandlungsfunktionen des Anwendungscontainers, wie z. B. die JSP-Fehlerseiten (JavaServer Pages), verwendet. Sie können die Fehlerbehandlung anpassen und spezifische Antworten zurücksenden, wenn eine Ausnahme eintritt oder ein Fehler auftritt.

Informationen zu diesem Vorgang

JAX-RS-Ressourcenmethoden können, wie jede Java-Methode, geprüfte und ungeprüfte Ausnahmen auslösen. Standardmäßig tritt eine ungeprüfte Laufzeitausnahmebedingung im Container erneut auf. Eine geprüfte Ausnahme wird für Ressourcen, die im Web-Container ausgeführt werden, in eine ServletException eingeschlossen. Daher kann ein Entwickler Fehlerbehandlungstools, wie z. B. JSP-Fehlerseiten, verwenden, um Ausnahmen, die von einer JAX-RS-Anwendung ausgelöst werden, zu verarbeiten.

JAX-RS hat die Ausnahme javax.ws.rs.WebApplicationException eingeführt. Ein Entwickler kann beim Erstellen einer WebApplicationException einen bestimmten Fehlerklassennamen oder ein Objekt vom Typ javax.ws.rs.core.Response angeben. Wenn die Ausnahme WebApplicationException ausgelöst wird, werden die in der Ausnahme über einen Statusklassennamen oder ein Antwortobjekt eingeschlossenen Informationen verwendet, um eine Antwort zu serialisieren.

Wenn Sie die Ausnahme WebApplicationException in Ihrem Code nicht auslösen und die Fehlerbehandlungstools im Web-Container nicht verwenden können, jedoch eine angepasste Fehlerantwort verwenden möchten, können Sie eine angepasste JAX-RS-Klasse vom Typ javax.ws.rs.ext.ExceptionMapper erstellen, um Ausnahmen HTTP-Fehlerantworten zuzuordnen.

Die folgende Vorgehensweise veranschaulicht, wie eine angepasste Klasse vom Typ ExceptionMapper geschrieben werden muss.

Vorgehensweise

  1. Erstellen Sie eine Klasse, die die Klasse javax.ws.rs.ext.ExceptionMapper implementiert, und versehen Sie die Klasse mit der Annotation javax.ws.rs.ext.Provider. Voraussetzung für diesen Schritt ist, dass Ihre JAX-RS-Ressource die Ausnahme MyCustomException in ihren Methoden auslösen kann. Das folgende Beispiel veranschaulicht eine einfache Klasse ExceptionMapper:
    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. Geben Sie in der Methode toResponse(MyCustomException) ein Objekt vom Typ Response zurück, das die angepasste Fehlerantwort enthält. Das folgende Beispiel veranschaulicht eine angepasste Methode vom Typ ExceptionMapper.toResponse(MyCustomException):
    @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();
        }
    
    }
    Sie können zusätzlichen Code verwenden, mit dem Sie Fehler protokollieren, ausgelöste Ausnahmen überprüfen oder komplexere Logik verwenden können.
  3. Packen Sie die kompilierte angepasste Klasse ExceptionMapper mit Ihrem Webanwendungsprojekt. Wenn Sie sich darauf verlassen, dass die Scanfunktionen der Annnotation alle JAX-RS-Klassen in Ihrer Webanwendung finden, sind keine zusätzlichen Schritte erforderlich. Möchten Sie aber alle relevanten JAX-RS-Ressourcenklassen und -provider in einer Unterklassenmethode einer JAX-RS-Anwendung zurückgeben, müssen Sie auch die angepasste Klasse ExceptionMapper zur Rückgabemenge hinzufügen. Das folgende Beispiel veranschaulicht eine bereits vorhandene Unterklasse vom Typ javax.ws.rs.core.Application:
    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);
            /* zusätzliche JAX-RS-Klassen hier hinzufügen */
            return classes;
        }
    }

    Wenn in Ihren JAX-RS-Ressourcenmethoden Ausnahmen auftreten, können Sie die HTTP-Fehlerantwort so anpassen, dass ein Benutzer einen Stack-Trace oder potenziell vertrauliche Daten nicht sehen kann. Verwenden Sie einen ExceptionMapper oder die Funktionen für Ausnahmebehandlung im Web-Container, um für den Fall, dass die Anwendung kein ordnungsgemäßes Verhalten aufweist, hilfreichere Antworten geben zu können.

Ergebnisse

Sie haben einen angepassten ExceptionMapper für die Behandlung von Ausnahmen in Ihrer JAX-RS-Webanwendung erstellt.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_jaxrs_defresource_exception_mapper
Dateiname:twbs_jaxrs_defresource_exception_mapper.html