Question on session tracking

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Question on session tracking

byersa
I am working on a plugin for the SeleniumXml tool that Brett demoed at
Apachecon. It sends a request to the server and parses the result, putting
it into the SeleniumXml test context.

I am using Apache's HttpClient 4.0b3 because it has some nice response
handling features. I am making two requests to the server, one to login and
one to run the request. My problem is that the login request seems to
execute okay, but when I inspect the contents of the cookies I don't see
anything that looks like a session management cookie (is it JSESSIONID ?) so
the second request does not share the session and does not think the user is
logged in, so the service fails due to authorization failure.

This is not an OFBiz problem, but I am hoping there are some OFBiz
friendlies out there that will help me move the testing environment along.
Is there something that a browser does in interacting with the server that
my HttpClient will not do unless I tell it to?
How does tomcat know to track sessions?

I have pasted in my current code. It is mostly a hack of HttpClient 4.0
examples.

package org.seleniumxml;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.scheme.SocketFactory;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicHttpRequest;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
import org.jdom.Element;


public class RemoteRequest {

    public static final String module = RemoteRequest.class.getName();

    /**
     * The default parameters.
     * Instantiated in {@link #setup setup}.
     */
    private static HttpParams defaultParameters = null;

    /**
     * The scheme registry.
     * Instantiated in {@link #setup setup}.
     */
    private static SchemeRegistry supportedSchemes;
    final private static String JsonHandleMode = "JSON_HANDLE";
    final private static String HttpHandleMode = "HTTP_HANDLE";

    private SeleniumXml parent;
    private SeleniumXml currentTest;
    private List <Element>children;
    private Map <String, Object> inMap;
    private Map <String, Object> outMap;
    private String requestUrl;
    private String host;
    private String responseHandlerMode;

    private int currentRowIndx;

    static {

        supportedSchemes = new SchemeRegistry();

        // Register the "http" protocol scheme, it is required
        // by the default operator to look up socket factories.
        SocketFactory sf = PlainSocketFactory.getSocketFactory();
        supportedSchemes.register(new Scheme("http", sf, 80));

        // prepare parameters
        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, "UTF-8");
        HttpProtocolParams.setUseExpectContinue(params, true);
        //HttpClientParams.setAuthenticating(params, true);
        defaultParameters = params;

    }
    public RemoteRequest(SeleniumXml parent, List<Element> children, String
requestUrl, String hostString, String responseHandlerMode) {
        super();
        this.parent = parent;
        this.requestUrl = requestUrl;
        this.host = hostString;
        this.children = children;
        this.responseHandlerMode =
(HttpHandleMode.equals(responseHandlerMode)) ? HttpHandleMode :
JsonHandleMode;
        initData();
    }

    private void initData() {

        String nm, name, value = null;
        for(Element elem: this.children) {
            nm = elem.getName();
            if (nm.equals("param-in") || nm.equals("param-inout")) {
                name = elem.getAttributeValue("name");
                value =
this.parent.replaceParam(elem.getAttributeValue("value"));
                this.inMap.put(name, value);
            } else if (nm.equals("param-out") || nm.equals("param-inout")) {
                name = elem.getAttributeValue("name");
                value =
this.parent.replaceParam(elem.getAttributeValue("value"));
                this.outMap.put(name, value);
            }
        }
        return;
    }

    public void runTest() {

        ClientConnectionManager ccm =
            new ThreadSafeClientConnManager(defaultParameters,
supportedSchemes);
        //  new SingleClientConnManager(getParams(), supportedSchemes);

        DefaultHttpClient client = new DefaultHttpClient(ccm,
defaultParameters);
        client.setKeepAliveStrategy(new
DefaultConnectionKeepAliveStrategy());  // Don't know what this does - a
shot in the dark

        //HttpContext clientContext = client.
        //HttpHost target = new HttpHost(this.host, 80, "http");
        HttpEntity entity = null;
        ResponseHandler <String> responseHandler = null;
        try {
            BasicHttpContext localContext = new BasicHttpContext(); // This
is what I expect to tie the requests to the same session

// because it stores the cookies
            // Create a local instance of cookie store
            CookieStore cookieStore = new BasicCookieStore();
            localContext.setAttribute(ClientContext.COOKIE_STORE,
cookieStore);
            //this.login(client, localContext);
            // I copied the 'login' code to here
            String paramString2 = "USERNAME=" + this.parent.getUserName()
                               + "&PASSWORD=" + this.parent.getPassword();
            String thisUri2 = this.host + "/eng/control/login?" +
paramString2;
            HttpGet req2 = new HttpGet ( thisUri2 );
            req2.setHeader("Connection","Keep-Alive");
            client.execute(req2, localContext);


            List<Cookie> cookies = cookieStore.getCookies();
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("Local cookie(0): " + cookies.get(i));
            }
            // The above lines print out: Local cookie(0): [version:
0][name: OFBiz.Visitor][value: 10221][domain: localhost][path: /][expiry:
Sat Nov 21 00:10:39 MST 2009]
            // I am thinking I should see something related to session
tracking here

            if (HttpHandleMode.equals(this.responseHandlerMode)) {

            } else {
                responseHandler = new JsonResponseHandler(this);
            }
            String paramString = urlEncodeArgs(this.inMap, true);
            String thisUri = this.host + this.requestUrl + "?" +
paramString;
            HttpGet req = new HttpGet ( thisUri );

            String responseBody = client.execute( req, responseHandler,
localContext);
            /*
            entity = rsp.getEntity();

            System.out.println("----------------------------------------");
            System.out.println(rsp.getStatusLine());
            Header[] headers = rsp.getAllHeaders();
            for (int i=0; i<headers.length; i++) {
                System.out.println(headers[i]);
            }
            System.out.println("----------------------------------------");

            if (entity != null) {
                System.out.println(EntityUtils.toString(rsp.getEntity()));
            }
            */
        } catch(IOException e) {
            System.out.println(e.getMessage());
        } finally {
            // If we could be sure that the stream of the entity has been
            // closed, we wouldn't need this code to release the connection.
            // However, EntityUtils.toString(...) can throw an exception.

            // if there is no entity, the connection is already released
            try {
              if (entity != null)
                entity.consumeContent(); // release connection gracefully
            } catch(IOException e) {
                System.out.println("in 'finally'  " + e.getMessage());
            }

        }
        return;
    }
Reply | Threaded
Open this post in threaded view
|

Re: Question on session tracking

byersa
See below.

On Fri, Nov 21, 2008 at 12:22 AM, Al Byers <[hidden email]>wrote:

> I am working on a plugin for the SeleniumXml tool that Brett demoed at
> Apachecon. It sends a request to the server and parses the result, putting
> it into the SeleniumXml test context.
>
> I am using Apache's HttpClient 4.0b3 because it has some nice response
> handling features. I am making two requests to the server, one to login and
> one to run the request. My problem is that the login request seems to
> execute okay, but when I inspect the contents of the cookies I don't see
> anything that looks like a session management cookie (is it JSESSIONID ?) so
> the second request does not share the session and does not think the user is
> logged in, so the service fails due to authorization failure.
>
> This is not an OFBiz problem, but I am hoping there are some OFBiz
> friendlies out there that will help me move the testing environment along.
> Is there something that a browser does in interacting with the server that
> my HttpClient will not do unless I tell it to?
> How does tomcat know to track sessions?

If tomcat is using HttpSession to maintain the connection between client and
server, my question still is what might I have to do with HttpClient that
the browser would automatically do?

-Al

>
>
> I have pasted in my current code. It is mostly a hack of HttpClient 4.0
> examples.
>
> package org.seleniumxml;
>
> import java.io.IOException;
> import java.io.UnsupportedEncodingException;
> import java.net.URLEncoder;
> import java.util.List;
> import java.util.Map;
>
> import org.apache.http.Header;
> import org.apache.http.HttpEntity;
> import org.apache.http.HttpHost;
> import org.apache.http.HttpRequest;
> import org.apache.http.HttpResponse;
> import org.apache.http.HttpVersion;
> import org.apache.http.auth.AuthScope;
> import org.apache.http.auth.UsernamePasswordCredentials;
> import org.apache.http.client.CookieStore;
> import org.apache.http.client.HttpResponseException;
> import org.apache.http.client.ResponseHandler;
> import org.apache.http.client.methods.HttpGet;
> import org.apache.http.client.params.HttpClientParams;
> import org.apache.http.client.protocol.ClientContext;
> import org.apache.http.conn.ClientConnectionManager;
> import org.apache.http.conn.scheme.PlainSocketFactory;
> import org.apache.http.conn.scheme.Scheme;
> import org.apache.http.conn.scheme.SchemeRegistry;
> import org.apache.http.conn.scheme.SocketFactory;
> import org.apache.http.cookie.Cookie;
> import org.apache.http.impl.client.BasicCookieStore;
> import org.apache.http.impl.client.BasicResponseHandler;
> import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
> import org.apache.http.impl.client.DefaultHttpClient;
> import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
> import org.apache.http.message.BasicHttpRequest;
> import org.apache.http.params.BasicHttpParams;
> import org.apache.http.params.HttpParams;
> import org.apache.http.params.HttpProtocolParams;
> import org.apache.http.protocol.BasicHttpContext;
> import org.apache.http.protocol.HttpContext;
> import org.apache.http.util.EntityUtils;
> import org.jdom.Element;
>
>
> public class RemoteRequest {
>
>     public static final String module = RemoteRequest.class.getName();
>
>     /**
>      * The default parameters.
>      * Instantiated in {@link #setup setup}.
>      */
>     private static HttpParams defaultParameters = null;
>
>     /**
>      * The scheme registry.
>      * Instantiated in {@link #setup setup}.
>      */
>     private static SchemeRegistry supportedSchemes;
>     final private static String JsonHandleMode = "JSON_HANDLE";
>     final private static String HttpHandleMode = "HTTP_HANDLE";
>
>     private SeleniumXml parent;
>     private SeleniumXml currentTest;
>     private List <Element>children;
>     private Map <String, Object> inMap;
>     private Map <String, Object> outMap;
>     private String requestUrl;
>     private String host;
>     private String responseHandlerMode;
>
>     private int currentRowIndx;
>
>     static {
>
>         supportedSchemes = new SchemeRegistry();
>
>         // Register the "http" protocol scheme, it is required
>         // by the default operator to look up socket factories.
>         SocketFactory sf = PlainSocketFactory.getSocketFactory();
>         supportedSchemes.register(new Scheme("http", sf, 80));
>
>         // prepare parameters
>         HttpParams params = new BasicHttpParams();
>         HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
>         HttpProtocolParams.setContentCharset(params, "UTF-8");
>         HttpProtocolParams.setUseExpectContinue(params, true);
>         //HttpClientParams.setAuthenticating(params, true);
>         defaultParameters = params;
>
>     }
>     public RemoteRequest(SeleniumXml parent, List<Element> children, String
> requestUrl, String hostString, String responseHandlerMode) {
>         super();
>         this.parent = parent;
>         this.requestUrl = requestUrl;
>         this.host = hostString;
>         this.children = children;
>         this.responseHandlerMode =
> (HttpHandleMode.equals(responseHandlerMode)) ? HttpHandleMode :
> JsonHandleMode;
>         initData();
>     }
>
>     private void initData() {
>
>         String nm, name, value = null;
>         for(Element elem: this.children) {
>             nm = elem.getName();
>             if (nm.equals("param-in") || nm.equals("param-inout")) {
>                 name = elem.getAttributeValue("name");
>                 value =
> this.parent.replaceParam(elem.getAttributeValue("value"));
>                 this.inMap.put(name, value);
>             } else if (nm.equals("param-out") || nm.equals("param-inout"))
> {
>                 name = elem.getAttributeValue("name");
>                 value =
> this.parent.replaceParam(elem.getAttributeValue("value"));
>                 this.outMap.put(name, value);
>             }
>         }
>         return;
>     }
>
>     public void runTest() {
>
>         ClientConnectionManager ccm =
>             new ThreadSafeClientConnManager(defaultParameters,
> supportedSchemes);
>         //  new SingleClientConnManager(getParams(), supportedSchemes);
>
>         DefaultHttpClient client = new DefaultHttpClient(ccm,
> defaultParameters);
>         client.setKeepAliveStrategy(new
> DefaultConnectionKeepAliveStrategy());  // Don't know what this does - a
> shot in the dark
>
>         //HttpContext clientContext = client.
>         //HttpHost target = new HttpHost(this.host, 80, "http");
>         HttpEntity entity = null;
>         ResponseHandler <String> responseHandler = null;
>         try {
>             BasicHttpContext localContext = new BasicHttpContext(); // This
> is what I expect to tie the requests to the same session
>
> // because it stores the cookies
>             // Create a local instance of cookie store
>             CookieStore cookieStore = new BasicCookieStore();
>             localContext.setAttribute(ClientContext.COOKIE_STORE,
> cookieStore);
>             //this.login(client, localContext);
>             // I copied the 'login' code to here
>             String paramString2 = "USERNAME=" + this.parent.getUserName()
>                                + "&PASSWORD=" + this.parent.getPassword();
>             String thisUri2 = this.host + "/eng/control/login?" +
> paramString2;
>             HttpGet req2 = new HttpGet ( thisUri2 );
>             req2.setHeader("Connection","Keep-Alive");
>             client.execute(req2, localContext);
>
>
>             List<Cookie> cookies = cookieStore.getCookies();
>             for (int i = 0; i < cookies.size(); i++) {
>                 System.out.println("Local cookie(0): " + cookies.get(i));
>             }
>             // The above lines print out: Local cookie(0): [version:
> 0][name: OFBiz.Visitor][value: 10221][domain: localhost][path: /][expiry:
> Sat Nov 21 00:10:39 MST 2009]
>             // I am thinking I should see something related to session
> tracking here
>
>             if (HttpHandleMode.equals(this.responseHandlerMode)) {
>
>             } else {
>                 responseHandler = new JsonResponseHandler(this);
>             }
>             String paramString = urlEncodeArgs(this.inMap, true);
>             String thisUri = this.host + this.requestUrl + "?" +
> paramString;
>             HttpGet req = new HttpGet ( thisUri );
>
>             String responseBody = client.execute( req, responseHandler,
> localContext);
>             /*
>             entity = rsp.getEntity();
>
>             System.out.println("----------------------------------------");
>             System.out.println(rsp.getStatusLine());
>             Header[] headers = rsp.getAllHeaders();
>             for (int i=0; i<headers.length; i++) {
>                 System.out.println(headers[i]);
>             }
>             System.out.println("----------------------------------------");
>
>             if (entity != null) {
>                 System.out.println(EntityUtils.toString(rsp.getEntity()));
>             }
>             */
>         } catch(IOException e) {
>             System.out.println(e.getMessage());
>         } finally {
>             // If we could be sure that the stream of the entity has been
>             // closed, we wouldn't need this code to release the
> connection.
>             // However, EntityUtils.toString(...) can throw an exception.
>
>             // if there is no entity, the connection is already released
>             try {
>               if (entity != null)
>                 entity.consumeContent(); // release connection gracefully
>             } catch(IOException e) {
>                 System.out.println("in 'finally'  " + e.getMessage());
>             }
>
>         }
>         return;
>     }
>
>
Reply | Threaded
Open this post in threaded view
|

Re: Question on session tracking

byersa
I am getting a little smarter. Instead of looking at the cookies, I printed
the headers:

Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=C8772FCBF4B7ACD69029A6FB8F9C2AFD.jvm1; Path=/eng
Set-Cookie: OFBiz.Visitor=10223; Expires=Sat, 21-Nov-2009 07:47:39 GMT;
Path=/
Set-Cookie: eng.autoUserLoginId=admin; Domain=""; Expires=Sat, 21-Nov-2009
07:47:39 GMT; Path=/
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 21 Nov 2008 07:47:39 GMT

So why does only the second 'Set-Cookie' get printed out by my listing code
->
Local cookie(0): [version: 0][name: OFBiz.Visitor][value: 10223][domain:
localhost][path: /][expiry: Sat Nov 21 00:47:39 MST 2009]

I will keep looking. Just did not want any one to fix my first level of bone
headedness - wait till it gets really deep.

-Al
Reply | Threaded
Open this post in threaded view
|

Re: Question on session tracking

byersa
I am able to get around the problem by pulling the JSESSIONID value out of
the returned headers and adding it to the second url in the form of
"...;jsessionid=...".

Setting the return JSESSIONID header to the same header that is returned did
not fix the problem. I wonder if it could have something to do with the fact
that "https=true" in in the controller.xml, but I have turned off all https
processing in the config file.

-Al
Reply | Threaded
Open this post in threaded view
|

Re: Question on session tracking

Adrian Crum-2
In reply to this post by byersa
Try using HtmlUnit.

-Adrian


--- On Thu, 11/20/08, Al Byers <[hidden email]> wrote:

> From: Al Byers <[hidden email]>
> Subject: Question on session tracking
> To: [hidden email]
> Date: Thursday, November 20, 2008, 11:22 PM
> I am working on a plugin for the SeleniumXml tool that Brett
> demoed at
> Apachecon. It sends a request to the server and parses the
> result, putting
> it into the SeleniumXml test context.
>
> I am using Apache's HttpClient 4.0b3 because it has
> some nice response
> handling features. I am making two requests to the server,
> one to login and
> one to run the request. My problem is that the login
> request seems to
> execute okay, but when I inspect the contents of the
> cookies I don't see
> anything that looks like a session management cookie (is it
> JSESSIONID ?) so
> the second request does not share the session and does not
> think the user is
> logged in, so the service fails due to authorization
> failure.
>
> This is not an OFBiz problem, but I am hoping there are
> some OFBiz
> friendlies out there that will help me move the testing
> environment along.
> Is there something that a browser does in interacting with
> the server that
> my HttpClient will not do unless I tell it to?
> How does tomcat know to track sessions?
>
> I have pasted in my current code. It is mostly a hack of
> HttpClient 4.0
> examples.
>
> package org.seleniumxml;
>
> import java.io.IOException;
> import java.io.UnsupportedEncodingException;
> import java.net.URLEncoder;
> import java.util.List;
> import java.util.Map;
>
> import org.apache.http.Header;
> import org.apache.http.HttpEntity;
> import org.apache.http.HttpHost;
> import org.apache.http.HttpRequest;
> import org.apache.http.HttpResponse;
> import org.apache.http.HttpVersion;
> import org.apache.http.auth.AuthScope;
> import org.apache.http.auth.UsernamePasswordCredentials;
> import org.apache.http.client.CookieStore;
> import org.apache.http.client.HttpResponseException;
> import org.apache.http.client.ResponseHandler;
> import org.apache.http.client.methods.HttpGet;
> import org.apache.http.client.params.HttpClientParams;
> import org.apache.http.client.protocol.ClientContext;
> import org.apache.http.conn.ClientConnectionManager;
> import org.apache.http.conn.scheme.PlainSocketFactory;
> import org.apache.http.conn.scheme.Scheme;
> import org.apache.http.conn.scheme.SchemeRegistry;
> import org.apache.http.conn.scheme.SocketFactory;
> import org.apache.http.cookie.Cookie;
> import org.apache.http.impl.client.BasicCookieStore;
> import org.apache.http.impl.client.BasicResponseHandler;
> import
> org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
> import org.apache.http.impl.client.DefaultHttpClient;
> import
> org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
> import org.apache.http.message.BasicHttpRequest;
> import org.apache.http.params.BasicHttpParams;
> import org.apache.http.params.HttpParams;
> import org.apache.http.params.HttpProtocolParams;
> import org.apache.http.protocol.BasicHttpContext;
> import org.apache.http.protocol.HttpContext;
> import org.apache.http.util.EntityUtils;
> import org.jdom.Element;
>
>
> public class RemoteRequest {
>
>     public static final String module =
> RemoteRequest.class.getName();
>
>     /**
>      * The default parameters.
>      * Instantiated in {@link #setup setup}.
>      */
>     private static HttpParams defaultParameters = null;
>
>     /**
>      * The scheme registry.
>      * Instantiated in {@link #setup setup}.
>      */
>     private static SchemeRegistry supportedSchemes;
>     final private static String JsonHandleMode =
> "JSON_HANDLE";
>     final private static String HttpHandleMode =
> "HTTP_HANDLE";
>
>     private SeleniumXml parent;
>     private SeleniumXml currentTest;
>     private List <Element>children;
>     private Map <String, Object> inMap;
>     private Map <String, Object> outMap;
>     private String requestUrl;
>     private String host;
>     private String responseHandlerMode;
>
>     private int currentRowIndx;
>
>     static {
>
>         supportedSchemes = new SchemeRegistry();
>
>         // Register the "http" protocol scheme,
> it is required
>         // by the default operator to look up socket
> factories.
>         SocketFactory sf =
> PlainSocketFactory.getSocketFactory();
>         supportedSchemes.register(new
> Scheme("http", sf, 80));
>
>         // prepare parameters
>         HttpParams params = new BasicHttpParams();
>         HttpProtocolParams.setVersion(params,
> HttpVersion.HTTP_1_1);
>         HttpProtocolParams.setContentCharset(params,
> "UTF-8");
>         HttpProtocolParams.setUseExpectContinue(params,
> true);
>         //HttpClientParams.setAuthenticating(params, true);
>         defaultParameters = params;
>
>     }
>     public RemoteRequest(SeleniumXml parent,
> List<Element> children, String
> requestUrl, String hostString, String responseHandlerMode)
> {
>         super();
>         this.parent = parent;
>         this.requestUrl = requestUrl;
>         this.host = hostString;
>         this.children = children;
>         this.responseHandlerMode =
> (HttpHandleMode.equals(responseHandlerMode)) ?
> HttpHandleMode :
> JsonHandleMode;
>         initData();
>     }
>
>     private void initData() {
>
>         String nm, name, value = null;
>         for(Element elem: this.children) {
>             nm = elem.getName();
>             if (nm.equals("param-in") ||
> nm.equals("param-inout")) {
>                 name =
> elem.getAttributeValue("name");
>                 value =
> this.parent.replaceParam(elem.getAttributeValue("value"));
>                 this.inMap.put(name, value);
>             } else if (nm.equals("param-out") ||
> nm.equals("param-inout")) {
>                 name =
> elem.getAttributeValue("name");
>                 value =
> this.parent.replaceParam(elem.getAttributeValue("value"));
>                 this.outMap.put(name, value);
>             }
>         }
>         return;
>     }
>
>     public void runTest() {
>
>         ClientConnectionManager ccm =
>             new
> ThreadSafeClientConnManager(defaultParameters,
> supportedSchemes);
>         //  new SingleClientConnManager(getParams(),
> supportedSchemes);
>
>         DefaultHttpClient client = new
> DefaultHttpClient(ccm,
> defaultParameters);
>         client.setKeepAliveStrategy(new
> DefaultConnectionKeepAliveStrategy());  // Don't know
> what this does - a
> shot in the dark
>
>         //HttpContext clientContext = client.
>         //HttpHost target = new HttpHost(this.host, 80,
> "http");
>         HttpEntity entity = null;
>         ResponseHandler <String> responseHandler =
> null;
>         try {
>             BasicHttpContext localContext = new
> BasicHttpContext(); // This
> is what I expect to tie the requests to the same session
>
> // because it stores the cookies
>             // Create a local instance of cookie store
>             CookieStore cookieStore = new
> BasicCookieStore();
>            
> localContext.setAttribute(ClientContext.COOKIE_STORE,
> cookieStore);
>             //this.login(client, localContext);
>             // I copied the 'login' code to here
>             String paramString2 = "USERNAME=" +
> this.parent.getUserName()
>                                + "&PASSWORD="
> + this.parent.getPassword();
>             String thisUri2 = this.host +
> "/eng/control/login?" +
> paramString2;
>             HttpGet req2 = new HttpGet ( thisUri2 );
>            
> req2.setHeader("Connection","Keep-Alive");
>             client.execute(req2, localContext);
>
>
>             List<Cookie> cookies =
> cookieStore.getCookies();
>             for (int i = 0; i < cookies.size(); i++) {
>                 System.out.println("Local cookie(0):
> " + cookies.get(i));
>             }
>             // The above lines print out: Local cookie(0):
> [version:
> 0][name: OFBiz.Visitor][value: 10221][domain:
> localhost][path: /][expiry:
> Sat Nov 21 00:10:39 MST 2009]
>             // I am thinking I should see something related
> to session
> tracking here
>
>             if
> (HttpHandleMode.equals(this.responseHandlerMode)) {
>
>             } else {
>                 responseHandler = new
> JsonResponseHandler(this);
>             }
>             String paramString = urlEncodeArgs(this.inMap,
> true);
>             String thisUri = this.host + this.requestUrl +
> "?" +
> paramString;
>             HttpGet req = new HttpGet ( thisUri );
>
>             String responseBody = client.execute( req,
> responseHandler,
> localContext);
>             /*
>             entity = rsp.getEntity();
>
>            
> System.out.println("----------------------------------------");
>             System.out.println(rsp.getStatusLine());
>             Header[] headers = rsp.getAllHeaders();
>             for (int i=0; i<headers.length; i++) {
>                 System.out.println(headers[i]);
>             }
>            
> System.out.println("----------------------------------------");
>
>             if (entity != null) {
>                
> System.out.println(EntityUtils.toString(rsp.getEntity()));
>             }
>             */
>         } catch(IOException e) {
>             System.out.println(e.getMessage());
>         } finally {
>             // If we could be sure that the stream of the
> entity has been
>             // closed, we wouldn't need this code to
> release the connection.
>             // However, EntityUtils.toString(...) can throw
> an exception.
>
>             // if there is no entity, the connection is
> already released
>             try {
>               if (entity != null)
>                 entity.consumeContent(); // release
> connection gracefully
>             } catch(IOException e) {
>                 System.out.println("in
> 'finally'  " + e.getMessage());
>             }
>
>         }
>         return;
>     }