ColdFusion includes a set of functions that enable your web service to get and set request and response headers. You use these functions to retrieve the response headers from a web service request and to create SOAP headers in a request that has the mustUnderstand attribute set to be True.
You typically use different functions in web services clients and in the web service CFC, itself:
In the client:
In the web service CFC:
The following example CFM page uses the AddSOAPRequestHeader, getSOAPRequest, and GetSOAPResponse functions:
<cfsavecontent variable="my_xml"> <Request xmlns="http://www.oasis-open.org/asap/0.9/asap.xsd"> <SenderKey>ss</SenderKey> <ReceiverKey>zz</ReceiverKey> <ResponseRequired>Yes</ResponseRequired> <RequestID>id</RequestID> </Request> </cfsavecontent> <cfset xml_obj = xmlparse(my_xml)> <cfscript> ws = CreateObject("webservice", "http://localhost:8500/soapexamples/HeaderFuncs.cfc?WSDL"); addSOAPRequestHeader(ws, "http://www.cfdevguide.com/", "testrequestheader", "#xml_obj#"); </cfscript> <cfscript> ret=ws.showSOAPHeaders(); inxml = getSOAPRequest(ws); outxml = getSOAPResponse(ws); </cfscript> <cfoutput> <h2>Return Value</h2> <!--- This is XML, so use HTMLCodeFormat. ---> The return value was #ret# <h2>Complete Request XML</h2> #htmlcodeformat(inxml)# <h2>Complete Response XML</h2> #htmlcodeformat(outxml)# </cfoutput>
The following example CFC uses the IsSOAPRequest and AddSOAPResponseHeader functions:
<cfcomponent> <cffunction name = "showSOAPHeaders" returnType = "string" output = "no" access = "remote" hint="After calling this function, use GetSOAPRequest and GetSOAPResponse to view headers"> <cfset var xml_obj = ""> <cfset var ret = ""> <cfif IsSOAPRequest()> <!--- Define a response header ---> <cfsavecontent variable="response_xml"> <ThisResponseHeader xmlns="http://www.cfdevguide.com"> <CreatedDateTime><cfoutput>#now()#</cfoutput></CreatedDateTime> <ExpiresInterval>6000</ExpiresInterval> </ThisResponseHeader> </cfsavecontent> <cfset xml_obj = xmlparse(response_xml)> <!--- Add the response header ---> <cfscript> addSOAPResponseHeader("http://www.cfdevguide.com/", "testresponseheader", "#xml_obj#"); ret = "Invoked as a web service. Use GetSOAPRequest and GetSOAPResponse to view headers."; </cfscript> <cfelse> <cfset ret = "Not invoked as a web service"> </cfif> <cfreturn ret> </cffunction> </cfcomponent>