Coverage Report - org.mule.session.LegacySessionHandler
 
Classes in this File Line Coverage Branch Coverage Complexity
LegacySessionHandler
0%
0/44
0%
0/18
0
 
 1  
 /*
 2  
  * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 3  
  * The software in this package is published under the terms of the CPAL v1.0
 4  
  * license, a copy of which has been included with this distribution in the
 5  
  * LICENSE.txt file.
 6  
  */
 7  
 package org.mule.session;
 8  
 
 9  
 import org.mule.api.MuleException;
 10  
 import org.mule.api.MuleMessage;
 11  
 import org.mule.api.MuleSession;
 12  
 import org.mule.api.config.MuleProperties;
 13  
 import org.mule.api.transformer.Transformer;
 14  
 import org.mule.api.transport.SessionHandler;
 15  
 import org.mule.config.i18n.CoreMessages;
 16  
 import org.mule.transformer.codec.Base64Decoder;
 17  
 import org.mule.transformer.codec.Base64Encoder;
 18  
 
 19  
 import java.io.UnsupportedEncodingException;
 20  
 import java.util.StringTokenizer;
 21  
 
 22  
 import org.apache.commons.logging.Log;
 23  
 import org.apache.commons.logging.LogFactory;
 24  
 
 25  
 /**
 26  
  * A session handler used to store and retrieve session information on an
 27  
  * event. The MuleSession information is stored as a header on the message (does not
 28  
  * support Tcp, Udp, etc. unless the MuleMessage object is serialised across the
 29  
  * wire). The session is stored in the "MULE_SESSION" property as String key/value
 30  
  * pairs that are Base64 encoded, for example:
 31  
  * ID=dfokokdf-3ek3oke-dkfokd;MySessionProp1=Value1;MySessionProp2=Value2
 32  
  * 
 33  
  * @deprecated Since all properties are converted to Strings, this session handler has the issue EE-1705/MULE-4567.  Use {@link SerializeAndEncodeSessionHandler} or {@link SerializeOnlySessionHandler} instead.
 34  
  */
 35  0
 public class LegacySessionHandler implements SessionHandler
 36  
 {
 37  0
     protected transient Log logger = LogFactory.getLog(getClass());
 38  
 
 39  0
     private static Transformer encoder = new Base64Encoder();
 40  0
     private static Transformer decoder = new Base64Decoder();
 41  
 
 42  
     public MuleSession retrieveSessionInfoFromMessage(MuleMessage message) throws MuleException
 43  
     {
 44  0
          MuleSession session = new DefaultMuleSession(message.getMuleContext());
 45  
 
 46  0
          String sessionId = message.getInboundProperty(MuleProperties.MULE_SESSION_ID_PROPERTY);
 47  0
          Object sessionHeader = message.getInboundProperty(MuleProperties.MULE_SESSION_PROPERTY);
 48  
 
 49  0
          if (sessionId != null)
 50  
          {
 51  0
              throw new IllegalStateException(
 52  
                  "This session handler does not know how to look up session information for session id: "
 53  
                                  + sessionId);
 54  
          }
 55  0
          if (sessionHeader != null)
 56  
          {
 57  
              String sessionString;
 58  
              try
 59  
              {
 60  0
                  sessionString = new String((byte[]) decoder.transform(sessionHeader), message.getEncoding());
 61  
              }
 62  0
              catch (UnsupportedEncodingException e)
 63  
              {
 64  0
                  sessionString = new String((byte[]) decoder.transform(sessionHeader));
 65  0
              }
 66  0
              if (logger.isDebugEnabled())
 67  
              {
 68  0
                  logger.debug("Parsing session header: " + sessionString);
 69  
              }
 70  
              String pair;
 71  
              String name;
 72  
              String value;
 73  0
              for (StringTokenizer stringTokenizer = new StringTokenizer(sessionString, ";"); stringTokenizer.hasMoreTokens();)
 74  
              {
 75  0
                  pair = stringTokenizer.nextToken();
 76  0
                  int i = pair.indexOf("=");
 77  0
                  if (i == -1)
 78  
                  {
 79  0
                      throw new IllegalArgumentException(
 80  
                          CoreMessages.sessionValueIsMalformed(pair).toString());
 81  
                  }
 82  0
                  name = pair.substring(0, i).trim();
 83  0
                  value = pair.substring(i + 1).trim();
 84  0
                  session.setProperty(name, value);
 85  0
                  if (logger.isDebugEnabled())
 86  
                  {
 87  0
                      logger.debug("Added MuleSession variable: " + pair);
 88  
                  }
 89  0
              }
 90  
          }
 91  0
          return session;
 92  
    }
 93  
 
 94  
     /**
 95  
      * @deprecated Use retrieveSessionInfoFromMessage(MuleMessage message) instead
 96  
      */
 97  
     public void retrieveSessionInfoFromMessage(MuleMessage message, MuleSession session) throws MuleException
 98  
     {
 99  0
         session = retrieveSessionInfoFromMessage(message);
 100  0
     }
 101  
 
 102  
     public void storeSessionInfoToMessage(MuleSession session, MuleMessage message) throws MuleException
 103  
     {
 104  0
         StringBuffer buf = new StringBuffer();
 105  0
         buf.append(getSessionIDKey()).append("=").append(session.getId());
 106  0
         for (String key : session.getPropertyNamesAsSet())
 107  
         {
 108  0
             buf.append(";");
 109  0
             buf.append(key).append("=").append(session.getProperty(key));
 110  0
             if (logger.isDebugEnabled())
 111  
             {
 112  0
                 logger.debug(String.format("Adding property to session header: %s=%s", key, session.getProperty(key)));
 113  
             }
 114  
         }
 115  0
         String sessionString = buf.toString();
 116  0
         if (logger.isDebugEnabled())
 117  
         {
 118  0
             logger.debug("Adding session header to message: " + sessionString);
 119  
         }
 120  0
         sessionString = (String) encoder.transform(sessionString);
 121  0
         message.setOutboundProperty(MuleProperties.MULE_SESSION_PROPERTY, sessionString);
 122  0
     }
 123  
     
 124  
     /**
 125  
      * @deprecated This method is no longer needed and will be removed in the next major release
 126  
      */
 127  
     public String getSessionIDKey()
 128  
     {
 129  0
         return "ID";
 130  
     }
 131  
 }