Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-5908

There is no provision to set the CACHED_HTTP_STATE with HttpContext object

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.7.4
    • None
    • transports
    • None

    Description

      Background:

      Current Approach: Currently we are using “commons-httpclient3:” to provide stateful webservice capability in our product through httpclient3. As Http state management can be maintained with HttpState object  in httpClient3, we implemented this as follows:

      • Implementation of HttpClient3 in Axis2 Client

            var myHttpState = new Packages.org.apache.commons.httpclient.HttpState();

            stub._getServiceClient().getOptions().setProperty('CACHED_HTTP_STATE',myHttpState);

       

      Problem with current approach: Since using httpclient3 is said to be NOT secured we want to go-head and use httpclient4. As Http state can be maintained with HttpContext object  in httpClient4. However, unlike HttpState, the current Axis2 Client API implementation does not expose the HttpContext to set the HttpClient4.

       

      Proposed Solution/Fix: To fix the above problem and make it work, we made following changes to the axis2-transport-http-1.7.4.jar that worked to make stateful behavior. We would like to go head with the fix and need your consent on the next steps in contributing this code so that it continues to behave the same way like it used to when using httpclient3.

      • Following change that need to include the Axis2 Client API to retrieve the httpContext.

            HttpContext localContext=

             (HttpContext)msgContext.getProperty(HTTPConstants.CACHED_HTTP_STATE);

       

      For HttpClient4,  HttpContext is instantiated and not allowed  set the  HttpContext with  options

       HttpContext localContext = new BasicHttpContext();

      We replaced the above code with following  to get the HttpConext with getOptions()

                  HttpContext localContext=  (HttpContext)msgContext.getProperty(HTTPConstants.CACHED_HTTP_STATE);

      So that, Client can set the  cookie in the httpContext to send it to server.

      org.apache.http.protocol.HttpContext localContext = new org.apache.http.protocol.BasicHttpContext();
                      org.apache.http.client.CookieStore cookieStore  = new org.apache.http.impl.client.BasicCookieStore();
                      org.apache.http.impl.cookie.BasicClientCookie newCookie=new org.apache.http.impl.cookie.BasicClientCookie("pin","1234");
                      cookieStore.addCookie(newCookie);
                      localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
                      stub._getServiceClient().getOptions().setProperty("CACHED_HTTP_STATE", localContext);

       

       

       

       

       

      Attachments

        Activity

          People

            Unassigned Unassigned
            psangyam Pavan Kumar Sangyam
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: