1
2
3
4
5
6
7
8
9
10
11 package org.mule.session;
12
13 import org.mule.api.MuleException;
14 import org.mule.api.MuleMessage;
15 import org.mule.api.MuleSession;
16 import org.mule.api.config.MuleProperties;
17 import org.mule.api.model.SessionException;
18 import org.mule.config.i18n.MessageFactory;
19 import org.mule.util.Base64;
20
21 import java.io.IOException;
22
23 import org.apache.commons.lang.SerializationUtils;
24
25
26
27
28
29
30
31
32 public class SerializeAndEncodeSessionHandler extends SerializeOnlySessionHandler
33 {
34 @Override
35 public MuleSession retrieveSessionInfoFromMessage(MuleMessage message) throws MuleException
36 {
37 MuleSession session = null;
38 String serializedEncodedSession = message.getInboundProperty(MuleProperties.MULE_SESSION_PROPERTY);
39
40 if (serializedEncodedSession != null)
41 {
42 byte[] serializedSession = Base64.decode(serializedEncodedSession);
43 if (serializedSession != null)
44 {
45
46 session = (MuleSession) SerializationUtils.deserialize(serializedSession);
47 }
48 }
49 return session;
50 }
51
52 @Override
53 public void storeSessionInfoToMessage(MuleSession session, MuleMessage message) throws MuleException
54 {
55 byte[] serializedSession = SerializationUtils.serialize(removeNonSerializableProperties(session));
56 String serializedEncodedSession;
57 try
58 {
59 serializedEncodedSession = Base64.encodeBytes(serializedSession, Base64.DONT_BREAK_LINES);
60 }
61 catch (IOException e)
62 {
63 throw new SessionException(MessageFactory.createStaticMessage("Unable to serialize MuleSession"), e);
64 }
65
66 if (logger.isDebugEnabled())
67 {
68 logger.debug("Adding serialized and base64-encoded Session header to message: " + serializedEncodedSession);
69 }
70 message.setOutboundProperty(MuleProperties.MULE_SESSION_PROPERTY, serializedEncodedSession);
71 }
72 }