Search in sources :

Example 6 with ErrorTO

use of org.apache.syncope.common.lib.to.ErrorTO in project syncope by apache.

the class RestClientExceptionMapper method checkSyncopeClientCompositeException.

private SyncopeClientCompositeException checkSyncopeClientCompositeException(final Response response) {
    SyncopeClientCompositeException compException = SyncopeClientException.buildComposite();
    // Attempts to read ErrorTO or List<ErrorTO> as entity...
    List<ErrorTO> errors = null;
    try {
        ErrorTO error = response.readEntity(ErrorTO.class);
        if (error != null) {
            errors = Collections.singletonList(error);
        }
    } catch (Exception e) {
        LOG.debug("Could not read {}, attempting to read composite...", ErrorTO.class.getName(), e);
    }
    if (errors == null) {
        try {
            errors = response.readEntity(new GenericType<List<ErrorTO>>() {
            });
        } catch (Exception e) {
            LOG.debug("Could not read {} list, attempting to read headers...", ErrorTO.class.getName(), e);
        }
    }
    // ...if not possible, attempts to parse response headers
    if (errors == null) {
        List<String> exTypesInHeaders = response.getStringHeaders().get(RESTHeaders.ERROR_CODE);
        if (exTypesInHeaders == null) {
            LOG.debug("No " + RESTHeaders.ERROR_CODE + " provided");
            return null;
        }
        List<String> exInfos = response.getStringHeaders().get(RESTHeaders.ERROR_INFO);
        Set<String> handledExceptions = new HashSet<>();
        exTypesInHeaders.forEach(exTypeAsString -> {
            ClientExceptionType exceptionType = null;
            try {
                exceptionType = ClientExceptionType.fromHeaderValue(exTypeAsString);
            } catch (IllegalArgumentException e) {
                LOG.error("Unexpected value of " + RESTHeaders.ERROR_CODE + ": " + exTypeAsString, e);
            }
            if (exceptionType != null) {
                handledExceptions.add(exTypeAsString);
                SyncopeClientException clientException = SyncopeClientException.build(exceptionType);
                if (exInfos != null && !exInfos.isEmpty()) {
                    for (String element : exInfos) {
                        if (element.startsWith(exceptionType.name())) {
                            clientException.getElements().add(StringUtils.substringAfter(element, ":"));
                        }
                    }
                }
                compException.addException(clientException);
            }
        });
        exTypesInHeaders.removeAll(handledExceptions);
        if (!exTypesInHeaders.isEmpty()) {
            LOG.error("Unmanaged exceptions: " + exTypesInHeaders);
        }
    } else {
        for (ErrorTO error : errors) {
            SyncopeClientException clientException = SyncopeClientException.build(error.getType());
            clientException.getElements().addAll(error.getElements());
            compException.addException(clientException);
        }
    }
    if (compException.hasExceptions()) {
        return compException;
    }
    return null;
}
Also used : SyncopeClientCompositeException(org.apache.syncope.common.lib.SyncopeClientCompositeException) ErrorTO(org.apache.syncope.common.lib.to.ErrorTO) GenericType(javax.ws.rs.core.GenericType) ClientExceptionType(org.apache.syncope.common.lib.types.ClientExceptionType) SyncopeClientException(org.apache.syncope.common.lib.SyncopeClientException) ForbiddenException(javax.ws.rs.ForbiddenException) SyncopeClientException(org.apache.syncope.common.lib.SyncopeClientException) WebServiceException(javax.xml.ws.WebServiceException) AccessControlException(java.security.AccessControlException) BadRequestException(javax.ws.rs.BadRequestException) SyncopeClientCompositeException(org.apache.syncope.common.lib.SyncopeClientCompositeException) HashSet(java.util.HashSet)

Aggregations

ErrorTO (org.apache.syncope.common.lib.to.ErrorTO)6 ResponseBuilder (javax.ws.rs.core.Response.ResponseBuilder)5 SyncopeClientException (org.apache.syncope.common.lib.SyncopeClientException)3 ClientExceptionType (org.apache.syncope.common.lib.types.ClientExceptionType)2 AccessControlException (java.security.AccessControlException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Map (java.util.Map)1 Set (java.util.Set)1 EntityExistsException (javax.persistence.EntityExistsException)1 PersistenceException (javax.persistence.PersistenceException)1 RollbackException (javax.persistence.RollbackException)1 ValidationException (javax.validation.ValidationException)1 BadRequestException (javax.ws.rs.BadRequestException)1 ForbiddenException (javax.ws.rs.ForbiddenException)1 GenericType (javax.ws.rs.core.GenericType)1 WebServiceException (javax.xml.ws.WebServiceException)1 SyncopeClientCompositeException (org.apache.syncope.common.lib.SyncopeClientCompositeException)1 EntityViolationType (org.apache.syncope.common.lib.types.EntityViolationType)1