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 import org.mule.util.SerializationUtils;
21
22 import java.io.IOException;
23
24
25
26
27
28
29
30
31 public class SerializeAndEncodeSessionHandler extends SerializeOnlySessionHandler
32 {
33 @Override
34 public MuleSession retrieveSessionInfoFromMessage(MuleMessage message) throws MuleException
35 {
36 MuleSession session = null;
37 String serializedEncodedSession = message.getInboundProperty(MuleProperties.MULE_SESSION_PROPERTY);
38
39 if (serializedEncodedSession != null)
40 {
41 byte[] serializedSession = Base64.decode(serializedEncodedSession);
42 if (serializedSession != null)
43 {
44 session = (MuleSession) SerializationUtils.deserialize(serializedSession, message.getMuleContext());
45 }
46 }
47 return session;
48 }
49
50 @Override
51 public void storeSessionInfoToMessage(MuleSession session, MuleMessage message) throws MuleException
52 {
53 byte[] serializedSession = SerializationUtils.serialize(removeNonSerializableProperties(session,message.getMuleContext()));
54 String serializedEncodedSession;
55 try
56 {
57 serializedEncodedSession = Base64.encodeBytes(serializedSession, Base64.DONT_BREAK_LINES);
58 }
59 catch (IOException e)
60 {
61 throw new SessionException(MessageFactory.createStaticMessage("Unable to serialize MuleSession"), e);
62 }
63
64 if (logger.isDebugEnabled())
65 {
66 logger.debug("Adding serialized and base64-encoded Session header to message: " + serializedEncodedSession);
67 }
68 message.setOutboundProperty(MuleProperties.MULE_SESSION_PROPERTY, serializedEncodedSession);
69 }
70 }