By | 05 May 2014

Parsing Cookies in Integration Broker Request Handler

I have been doing a tremendous amount of integration broker work lately. In one project, I had to retrieve a cookie submitted by the requester and do some processing with it. The integration broker cookie API (&MSG.IBInfo.IBConnectorInfo.Cookies) returns the cookies with all the cookies and key value pairs as one large string. As far as I can tell from the current state of the documentation, you have to write your own cookie parser on the string returned.

Cookies are submitted in the HTTP headers like this:


I threw together a method called getCookieFromRequest that is meant to live inside your subscription handler code. Here is the method I wrote that splits the cookie by ; and then again by =.

You ask it for a cookie key name and it will return back the value if it exists.

method getCookieFromRequest
   /+ &MSG as Message, +/
   /+ &cookieName as String +/
   /+ Returns String +/
   Local string &requestCookies;
      &requestCookies = &MSG.IBInfo.IBConnectorInfo.Cookies;
      Local array of string &aInboundCookiesKeyValues;
      &aInboundCookiesKeyValues = CreateArrayRept("", 0);
      &aInboundCookiesKeyValues = Split(&requestCookies, ";");
      Local integer &i;
      Local array of string &aKeyValue;
      Local integer &cookieValLocationStart;
      For &i = 1 To &aInboundCookiesKeyValues.Len
         &aKeyValue = Split(&aInboundCookiesKeyValues [&i], "=");
         If LTrim(RTrim(&aKeyValue [1])) = &cookieName Then
            Return &aKeyValue [2];
      Return "";
   catch Exception &E
      Return "";;

Here is a sample of how it would sit in an subscription handler. In this example, we are going after the PS_TOKEN cookie.

class INBOUND_TESTER implements PS_PT:Integration:IRequestHandler
   method onRequest(&MSG As Message) Returns Message;
   method getCookieFromRequest(&MSG As Message, &cookieName As string) Returns string;

method onRequest
   /+ &MSG as Message +/
   /+ Returns Message +/
   /+ Extends/implements PS_PT:Integration:IRequestHandler.OnRequest +/
   /* Setup response xml body */
   Local Message &response;
   &response = CreateMessage(Operation.CHG_TEST, %IntBroker_Response);
   Local XmlDoc &xmlout;
   Local XmlNode &childNode;
   &xmlout = CreateXmlDoc("<?xml version='1.0'?><response/>");
   Local string &cValue;
   &cValue = %This.getCookieFromRequest(&MSG, "PS_TOKEN");

   if all(&cValue) then
      /* Do something with cookie */

   Return &response;

method getCookieFromRequest

Let me know if you find a better way or think you have improvements on this.