Example usage for org.apache.commons.httpclient HttpMethod validate

List of usage examples for org.apache.commons.httpclient HttpMethod validate

Introduction

In this page you can find the example usage for org.apache.commons.httpclient HttpMethod validate.

Prototype

public abstract boolean validate();

Source Link

Usage

From source file:org.alfresco.rest.api.tests.client.AuthenticatedHttp.java

/**
 * Execute the given method, authenticated as the given user using ticket-based authentication.
 * @param method method to execute//w  w w.j a  v  a  2  s .  c  o  m
 * @param userName name of user to authenticate
 * @return status-code resulting from the request
 */
private <T extends Object> T executeWithTicketAuthentication(HttpMethod method, String userName,
        String password, HttpRequestCallback<T> callback) {
    String ticket = authDetailProvider.getTicketForUser(userName);
    if (ticket == null) {
        ticket = fetchLoginTicket(userName, password);
        authDetailProvider.updateTicketForUser(userName, ticket);
    }

    try {
        HttpState state = applyTicketToMethod(method, ticket);

        // Try executing the method
        int result = httpProvider.getHttpClient().executeMethod(null, method, state);

        if (result == HttpStatus.SC_UNAUTHORIZED || result == HttpStatus.SC_FORBIDDEN) {
            method.releaseConnection();
            if (!method.validate()) {
                throw new RuntimeException(
                        "Ticket re-authentication failed for user " + userName + " (HTTPMethod not reusable)");
            }
            // Fetch new ticket, store and apply to HttpMethod
            ticket = fetchLoginTicket(userName, userName);
            authDetailProvider.updateTicketForUser(userName, ticket);

            state = applyTicketToMethod(method, ticket);

            // Run method agian with new ticket
            result = httpProvider.getHttpClient().executeMethod(null, method, state);
        }

        if (callback != null) {
            return callback.onCallSuccess(method);
        }

        return null;
    } catch (Throwable t) {
        boolean handled = false;
        // Delegate to callback to handle error. If not available, throw exception
        if (callback != null) {
            handled = callback.onError(method, t);
        }

        if (!handled) {
            throw new RuntimeException("Error while executing HTTP-call (" + method.getPath() + ")", t);
        }
        return null;

    } finally {
        method.releaseConnection();
    }

}