You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2011/12/05 14:29:29 UTC
svn commit: r1210456 [2/2] - in /synapse/trunk/java/modules: core/
core/src/main/java/org/apache/synapse/
core/src/main/java/org/apache/synapse/config/
core/src/main/java/org/apache/synapse/config/xml/
core/src/main/java/org/apache/synapse/config/xml/e...
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/dispatch/HttpSessionDispatcher.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/dispatch/HttpSessionDispatcher.java?rev=1210456&r1=1210455&r2=1210456&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/dispatch/HttpSessionDispatcher.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/dispatch/HttpSessionDispatcher.java Mon Dec 5 13:29:27 2011
@@ -19,7 +19,13 @@
package org.apache.synapse.endpoints.dispatch;
+import org.apache.http.protocol.HTTP;
import org.apache.synapse.MessageContext;
+import org.apache.synapse.core.axis2.Axis2MessageContext;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
/**
@@ -33,6 +39,7 @@ public class HttpSessionDispatcher exten
/*HTTP Headers */
private final static String COOKIE = "Cookie";
private final static String SET_COOKIE = "Set-Cookie";
+ public static final String HOSTS = "hosts";
/**
* Check if "Cookie" HTTP header is available. If so, check if that cookie is in the session
@@ -43,7 +50,52 @@ public class HttpSessionDispatcher exten
* @return Endpoint Server endpoint for the given HTTP session.
*/
public SessionInformation getSession(MessageContext synCtx) {
- return SALSessions.getInstance().getSession(extractSessionID(synCtx, COOKIE));
+ String hostName = extractHost(synCtx);
+ if (log.isDebugEnabled()) {
+ log.debug("Extracted Host Name : " + hostName);
+ }
+
+ // print TO
+ org.apache.axis2.context.MessageContext axis2MessageContext =
+ ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+ if (log.isDebugEnabled()) {
+ log.debug("Endpoint Address : " + axis2MessageContext.getTo().getAddress());
+ }
+
+ Map headerMap = getTransportHeaderMap(synCtx);
+ String contentType = (String)headerMap.get("Content-Type");
+ if (log.isDebugEnabled()) {
+ log.debug("Content Type : " + contentType);
+ }
+
+ if (hostName == null) {
+ return SALSessions.getInstance().getSession(extractSessionID(synCtx, COOKIE));
+ } else {
+ List<String> sessionList = extractSessionIDs(synCtx, COOKIE);
+ if (sessionList != null) {
+ for (String sessionID : sessionList) {
+ SessionInformation sessionInfoObj = SALSessions.getInstance().getSession(sessionID);
+ if (sessionInfoObj != null) {
+ Map<String, String> subDomainNames =
+ (Map<String, String>) sessionInfoObj.getMember().getProperties().get(HOSTS);
+ if (log.isDebugEnabled()) {
+ log.debug("Member Domain : " + (subDomainNames != null ? subDomainNames.get(hostName) : null) +
+ " : Session ID " + sessionID);
+ }
+ if (subDomainNames != null && subDomainNames.get(hostName) != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Found a matching sessionInfo Object for the " + hostName);
+ }
+ return sessionInfoObj;
+ }
+ }
+ }
+ }
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Did not find a session info obj.");
+ }
+ return null;
}
/**
@@ -86,4 +138,79 @@ public class HttpSessionDispatcher exten
public void removeSessionID(MessageContext syCtx) {
removeSessionID(syCtx, COOKIE);
}
+
+ protected List<String> extractSessionIDs(MessageContext synCtx, String key) {
+ List<String> sessionList = new ArrayList<String>();
+ if (key != null) {
+ Map headerMap = getTransportHeaderMap(synCtx);
+ if (headerMap != null) {
+ Object hostObj = headerMap.get("Host");
+ if (log.isDebugEnabled()) {
+ log.debug("A request received with the Host Name : " + hostObj);
+ }
+ Object cookieObj = headerMap.get(key);
+ if (cookieObj instanceof String) {
+ String cookie = (String) cookieObj;
+ if (log.isDebugEnabled()) {
+ log.debug("Cookies String : " + cookie);
+ }
+ // extract the first name value pair of the Set-Cookie header, which is considered
+ // as the session id which will be sent back from the client with the Cookie header
+ // for example;
+ // Set-Cookie: JSESSIONID=760764CB72E96A7221506823748CF2AE; Path=/
+ // will result in the session id "JSESSIONID=760764CB72E96A7221506823748CF2AE"
+ String[] sessionIds = cookie.split(";");
+ if (sessionIds == null || sessionIds.length == 0) {
+ if (log.isDebugEnabled()) {
+ log.debug("Cannot find a session id for the cookie : " + cookie);
+ }
+ return null;
+ }
+ for(String sessionId : sessionIds){
+ if(sessionId != null && sessionId.contains("JSESSIONID")) {
+ if (log.isDebugEnabled()) {
+ log.debug("Extracted SessionID : " + sessionId);
+ }
+ sessionList.add(sessionId.trim());
+ }
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Couldn't find the " + key + " header to find the session");
+ }
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("Couldn't find the TRANSPORT_HEADERS to find the session");
+ }
+
+ }
+ }
+ return sessionList;
+ }
+
+ private String extractHost(MessageContext synCtx) {
+ Map headerMap = getTransportHeaderMap(synCtx);
+ String hostName = null;
+ if (headerMap != null) {
+ Object hostObj = headerMap.get(HTTP.TARGET_HOST);
+ hostName = (String) hostObj;
+ if (hostName.contains(":")) {
+ hostName = hostName.substring(0, hostName.indexOf(":"));
+ }
+ }
+ return hostName;
+ }
+
+ private Map getTransportHeaderMap(MessageContext synCtx) {
+
+ org.apache.axis2.context.MessageContext axis2MessageContext =
+ ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+
+ Object o = axis2MessageContext.getProperty(org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS);
+ if (o != null && o instanceof Map) {
+ return (Map) o;
+ }
+ return null;
+ }
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/dispatch/SALSessions.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/dispatch/SALSessions.java?rev=1210456&r1=1210455&r2=1210456&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/dispatch/SALSessions.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/dispatch/SALSessions.java Mon Dec 5 13:29:27 2011
@@ -223,7 +223,7 @@ public class SALSessions {
if (sessionID == null || "".equals(sessionID)) {
if (log.isDebugEnabled()) {
- log.debug("Cannot find session ID .Returing null");
+ log.debug("Cannot find session ID .Returning null");
}
return null;
}
@@ -342,7 +342,9 @@ public class SALSessions {
}
if (!toBeRemoved.isEmpty()) {
- log.info("Clearing expired sessions");
+ if (log.isDebugEnabled()) {
+ log.debug("Clearing expired sessions");
+ }
for (String key : toBeRemoved) {
Replicator.removeAndReplicateState(key, configCtx);
@@ -364,7 +366,9 @@ public class SALSessions {
}
if (!toBeRemoved.isEmpty()) {
- log.info("Clearing expired sessions");
+ if (log.isDebugEnabled()) {
+ log.debug("Clearing expired sessions");
+ }
establishedSessions.keySet().removeAll(toBeRemoved);
}
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java?rev=1210456&r1=1210455&r2=1210456&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MessageHelper.java Mon Dec 5 13:29:27 2011
@@ -218,7 +218,7 @@ public class MessageHelper {
}
}
- newMC.setServerSide(ori.isServerSide());
+ newMC.setServerSide(false);
return newMC;
}
Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/LogMediatorSerializationTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/LogMediatorSerializationTest.java?rev=1210456&r1=1210455&r2=1210456&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/LogMediatorSerializationTest.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/xml/LogMediatorSerializationTest.java Mon Dec 5 13:29:27 2011
@@ -18,6 +18,14 @@
*/
package org.apache.synapse.config.xml;
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.util.AXIOMUtil;
+import org.apache.axiom.om.xpath.AXIOMXPath;
+import org.jaxen.JaxenException;
+
+import javax.xml.stream.XMLStreamException;
+
/**
*
*
@@ -95,15 +103,38 @@ public class LogMediatorSerializationTes
logMediatorSerializer));
}
+ public void testXPath() {
+ try {
+ OMElement element = AXIOMUtil.stringToOM(getXmlOfMediatorScenarioOneA("full"));
+
+ AXIOMXPath xPath = new AXIOMXPath("//property/@name");
+ //xPath.addNamespace(SynapseConstants.SYNAPSE_NAMESPACE, "");
+ Object o = xPath.selectSingleNode(element);
+ if (o instanceof OMAttribute) {
+ System.out.println(((OMAttribute) o).getAttributeValue());
+ }
+ } catch (XMLStreamException e) {
+ e.printStackTrace();
+ } catch (JaxenException e) {
+ e.printStackTrace();
+ }
+ }
+
private String getXmlOfMediatorScenarioOne(String level) {
return "<log xmlns=\"http://ws.apache.org/ns/synapse\" level=\"" +
level + "\"><property name=\"Text\" value=\"Sending quote request\"/></log>";
}
- private String getXmlOfMediatorScenarioTwo(String level, String seperator) {
+ private String getXmlOfMediatorScenarioOneA(String level) {
+ return "<log level=\"" +
+ level + "\"><property name=\"Text\" value=\"Sending quote request\"/></log>";
+
+ }
+
+ private String getXmlOfMediatorScenarioTwo(String level, String separator) {
return "<log xmlns=\"http://ws.apache.org/ns/synapse\" level=\"" +
- level + "\" separator=\"" + seperator +
+ level + "\" separator=\"" + separator +
"\"><property name=\"Text\" value=\"Sending quote request\"/></log>";
}
Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java?rev=1210456&r1=1210455&r2=1210456&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/NhttpConstants.java Mon Dec 5 13:29:27 2011
@@ -144,4 +144,6 @@ public class NhttpConstants {
public static final String FORCE_CONNECTION_CLOSE = "FORCE_CONNECTION_CLOSE";
public static final String PORT_OFFSET = "portOffset";
public static final String ENDPOINTS_CONFIGURATION = "endpointsConfiguration";
+
+ public static final String HEADER_X_FORWARDED_FOR = "X-Forwarded-For";
}