com.ibm.sbt.services.client.CookieStoreClientService.java Source code

Java tutorial

Introduction

Here is the source code for com.ibm.sbt.services.client.CookieStoreClientService.java

Source

/*
 *  Copyright IBM Corp. 2012
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at:
 * 
 * http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
 * implied. See the License for the specific language governing 
 * permissions and limitations under the License.
 */
package com.ibm.sbt.services.client;

import java.io.IOException;
import java.util.List;

import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.client.CookieStore;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HttpContext;

import com.ibm.sbt.services.endpoints.Endpoint;

/**
 * Generic REST service.
 * 
 * @author mwallace
 */
@SuppressWarnings("deprecation")
public class CookieStoreClientService extends ClientService {

    private DefaultHttpClient httpClient;

    static private CookieStore cookieStore = new BasicCookieStore();

    public CookieStoreClientService() {
    }

    public CookieStoreClientService(Endpoint endpoint) {
        super(endpoint);
    }

    public CookieStoreClientService(String endpointName) {
        super(endpointName);
    }

    /* (non-Javadoc)
     * @see com.ibm.sbt.services.client.ClientService#createHttpClient(org.apache.http.client.methods.HttpRequestBase, com.ibm.sbt.services.client.ClientService.Args)
     */
    @Override
    public synchronized DefaultHttpClient createHttpClient(HttpRequestBase httpRequestBase, Args args)
            throws ClientServicesException {
        if (httpClient == null) {
            httpClient = super.createHttpClient(httpRequestBase, args);
        }
        return httpClient;
    }

    /* (non-Javadoc)
     * @see com.ibm.sbt.services.client.ClientService#initialize(org.apache.http.impl.client.DefaultHttpClient)
     */
    @Override
    protected void initialize(DefaultHttpClient httpClient) throws ClientServicesException {
        super.initialize(httpClient);

        httpClient.addRequestInterceptor(new CookieInterceptor(), 1);
    }

    /* (non-Javadoc)
     * @see com.ibm.sbt.services.client.ClientService#execRequest(org.apache.http.client.methods.HttpRequestBase, com.ibm.sbt.services.client.ClientService.Args, java.lang.Object)
     */
    @Override
    protected Response execRequest(HttpRequestBase httpRequestBase, Args args, Object content)
            throws ClientServicesException {
        Response response = super.execRequest(httpRequestBase, args, content);

        CookieStore cookieStore = httpClient.getCookieStore();
        List<Cookie> cookies = cookieStore.getCookies();
        //System.out.println(hashCode() +" < "+cookies.size());
        for (Cookie cookie : cookies) {
            //System.out.println(cookie.getName()+"="+cookie.getValue());
            CookieStoreClientService.cookieStore.addCookie(cookie);
        }

        return response;
    }

    private class CookieInterceptor implements HttpRequestInterceptor {

        /* (non-Javadoc)
         * @see org.apache.http.HttpRequestInterceptor#process(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext)
         */
        @Override
        public void process(HttpRequest httpRequest, HttpContext httpContext) throws HttpException, IOException {
            //System.out.println(CookieStoreClientService.this.hashCode() +" > "+cookieStore.getCookies().size());
            if (!cookieStore.getCookies().isEmpty()) {
                httpContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
                //CookieStore cookieStore = (CookieStore)httpContext.getAttribute(ClientContext.COOKIE_STORE);
                //List<Cookie> cookies = cookieStore.getCookies();
                //System.out.println("> "+cookies.size());
                //for (Cookie cookie : cookies) {
                //   System.out.println("> "+cookie.getName()+"="+cookie.getValue());
                //}
            }
        }

    }

}