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
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 ChrisPeopleSoft Simple Web Services (SWS)
Do you need a quick way to create web services?
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.
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.