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"; }
