Author: kishanthan
Date: Mon Sep 30 01:40:10 2013
New Revision: 1527429
URL: http://svn.apache.org/r1527429
Log:
fixing AXIS2-5608 by removing the specific check for JSESSIONID/axis_session
and adding whatever the value(s) in the Set-Cookie header as session cookie
Modified:
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
Modified:
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java?rev=1527429&r1=1527428&r2=1527429&view=diff
==============================================================================
---
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java
(original)
+++
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient3/HTTPSenderImpl.java
Mon Sep 30 01:40:10 2013
@@ -413,19 +413,28 @@ public class HTTPSenderImpl extends HTTP
// Process old style headers first
Header[] cookieHeaders =
method.getResponseHeaders(HTTPConstants.HEADER_SET_COOKIE);
String customCoookiId = (String)
msgContext.getProperty(Constants.CUSTOM_COOKIE_ID);
- for (int i = 0; i < cookieHeaders.length; i++) {
- HeaderElement[] elements = cookieHeaders[i].getElements();
- for (int e = 0; e < elements.length; e++) {
- HeaderElement element = elements[e];
- if
(Constants.SESSION_COOKIE.equalsIgnoreCase(element.getName())
- ||
Constants.SESSION_COOKIE_JSESSIONID.equalsIgnoreCase(element.getName())) {
- sessionCookie = processCookieHeader(element);
- }
- if (customCoookiId != null &&
customCoookiId.equalsIgnoreCase(element.getName())) {
- sessionCookie = processCookieHeader(element);
- }
- }
- }
+
+ // The following only check for JSESSIONID / axis_session /
custom-cookie-id from the Set-Cookie header.
+ // But it will ignore if there are other Set-Cookie values, which may
cause issues at client level,
+ // when invoking via a load-balancer, which expect some specific
Cookie value.
+ // So the correct fix is to add whatever the value(s) in the
Set-Cookie header as session cookie.
+
+// for (int i = 0; i < cookieHeaders.length; i++) {
+// HeaderElement[] elements = cookieHeaders[i].getElements();
+// for (int e = 0; e < elements.length; e++) {
+// HeaderElement element = elements[e];
+// if
(Constants.SESSION_COOKIE.equalsIgnoreCase(element.getName())
+// ||
Constants.SESSION_COOKIE_JSESSIONID.equalsIgnoreCase(element.getName())) {
+// sessionCookie = processCookieHeader(element);
+// }
+// if (customCoookiId != null &&
customCoookiId.equalsIgnoreCase(element.getName())) {
+// sessionCookie = processCookieHeader(element);
+// }
+// }
+// }
+
+ sessionCookie = processSetCookieHeaders(cookieHeaders);
+
// Overwrite old style cookies with new style ones if present
cookieHeaders =
method.getResponseHeaders(HTTPConstants.HEADER_SET_COOKIE2);
for (int i = 0; i < cookieHeaders.length; i++) {
@@ -442,7 +451,7 @@ public class HTTPSenderImpl extends HTTP
}
}
- if (sessionCookie != null) {
+ if (sessionCookie != null && !sessionCookie.equals("")) {
msgContext.getServiceContext().setProperty(HTTPConstants.COOKIE_STRING,
sessionCookie);
}
}
@@ -457,6 +466,25 @@ public class HTTPSenderImpl extends HTTP
return cookie;
}
+
+ private String processSetCookieHeaders(Header[] headers) {
+ String cookie = "";
+ for (Header header : headers) {
+ if (!cookie.equals("")) {
+ cookie = cookie + ";";
+ }
+ HeaderElement[] elements = header.getElements();
+ for (HeaderElement element : elements) {
+ cookie = cookie + element.getName() + "=" + element.getValue();
+ NameValuePair[] parameters = element.getParameters();
+ for (NameValuePair parameter : parameters) {
+ cookie = cookie + "; " + parameter.getName() + "=" +
parameter.getValue();
+ }
+ }
+ }
+ return cookie;
+ }
+
protected void processResponse(HttpMethodBase httpMethod, MessageContext
msgContext)
throws IOException {
obtainHTTPHeaderInformation(httpMethod, msgContext);
Modified:
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java?rev=1527429&r1=1527428&r2=1527429&view=diff
==============================================================================
---
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
(original)
+++
axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
Mon Sep 30 01:40:10 2013
@@ -433,19 +433,28 @@ public class HTTPSenderImpl extends HTTP
// Process old style headers first
Header[] cookieHeaders =
response.getHeaders(HTTPConstants.HEADER_SET_COOKIE);
String customCoookiId = (String)
msgContext.getProperty(Constants.CUSTOM_COOKIE_ID);
- for (int i = 0; i < cookieHeaders.length; i++) {
- HeaderElement[] elements = cookieHeaders[i].getElements();
- for (int e = 0; e < elements.length; e++) {
- HeaderElement element = elements[e];
- if
(Constants.SESSION_COOKIE.equalsIgnoreCase(element.getName())
- ||
Constants.SESSION_COOKIE_JSESSIONID.equalsIgnoreCase(element.getName())) {
- sessionCookie = processCookieHeader(element);
- }
- if (customCoookiId != null &&
customCoookiId.equalsIgnoreCase(element.getName())) {
- sessionCookie = processCookieHeader(element);
- }
- }
- }
+
+ // The following only check for JSESSIONID / axis_session /
custom-cookie-id from the Set-Cookie header.
+ // But it will ignore if there are other Set-Cookie values, which may
cause issues at client level,
+ // when invoking via a load-balancer, which expect some specific
Cookie value.
+ // So the correct fix is to add whatever the value(s) in the
Set-Cookie header as session cookie.
+
+// for (int i = 0; i < cookieHeaders.length; i++) {
+// HeaderElement[] elements = cookieHeaders[i].getElements();
+// for (int e = 0; e < elements.length; e++) {
+// HeaderElement element = elements[e];
+// if
(Constants.SESSION_COOKIE.equalsIgnoreCase(element.getName())
+// ||
Constants.SESSION_COOKIE_JSESSIONID.equalsIgnoreCase(element.getName())) {
+// sessionCookie = processCookieHeader(element);
+// }
+// if (customCoookiId != null &&
customCoookiId.equalsIgnoreCase(element.getName())) {
+// sessionCookie = processCookieHeader(element);
+// }
+// }
+// }
+
+ sessionCookie = processSetCookieHeaders(cookieHeaders);
+
// Overwrite old style cookies with new style ones if present
cookieHeaders = response.getHeaders(HTTPConstants.HEADER_SET_COOKIE2);
for (int i = 0; i < cookieHeaders.length; i++) {
@@ -462,7 +471,7 @@ public class HTTPSenderImpl extends HTTP
}
}
- if (sessionCookie != null) {
+ if (sessionCookie != null && !sessionCookie.equals("")) {
msgContext.getServiceContext().setProperty(HTTPConstants.COOKIE_STRING,
sessionCookie);
}
}
@@ -477,6 +486,24 @@ public class HTTPSenderImpl extends HTTP
return cookie;
}
+ private String processSetCookieHeaders(Header[] headers) {
+ String cookie = "";
+ for (Header header : headers) {
+ if (!cookie.equals("")) {
+ cookie = cookie + ";";
+ }
+ HeaderElement[] elements = header.getElements();
+ for (HeaderElement element : elements) {
+ cookie = cookie + element.getName() + "=" + element.getValue();
+ NameValuePair[] parameters = element.getParameters();
+ for (NameValuePair parameter : parameters) {
+ cookie = cookie + "; " + parameter.getName() + "=" +
parameter.getValue();
+ }
+ }
+ }
+ return cookie;
+ }
+
protected void processResponse(HttpResponse response, MessageContext
msgContext)
throws IOException {
obtainHTTPHeaderInformation(response, msgContext);