Parsing Cookies in Integration Broker Request Handler

By Chris Malek | Mon, May 5, 2014

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:

Cookie: COOKIE_NAME1=COOKIE_1_VALUE; COOKIE_NAME2=COOKIE_2_VALUE; COOKIE_NAME3=COOKIE_3_VALUE

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;

   try

      &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];
         End-If;
      End-For;

      Return "";


   catch Exception &E
      Return "";;
   end-try;


end-method;

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;


end-class;

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("");

   Local string &cValue;

   &cValue = %This.getCookieFromRequest(&MSG, "PS_TOKEN");


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

   Return &response;

end-method;

method getCookieFromRequest
  ....snip.....

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

Article Categories
Author Info
Chris Malek

Chris Malek is a PeopleTools® Technical Consultant with two decades of experience working on PeopleSoft enterprise software projects. He is available for consulting engagements.

About Chris Work with Chris
Looking for pain-free PeopleSoft web services? 😀
PeopleSoft Simple Web Services (SWS)

Introducing a small but powerful PeopleSoft bolt-on that makes web services very easy. If you have a SQL statement, you can turn that into a web service in PeopleSoft in a few minutes.

Book
Integration Broker - The Missing Manual

I am in the process of writing a book called "Integration Broker - The Missing Manual" that you can read online.