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