Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
1.7.4
-
None
-
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);