Add HTTP request header to the SOAP invocation

Problem statement

Making multiple calls to SOAP is an expensive step for memory and database, therefore, using a session scope for web services becomes critical.

Workaround

Add a session cookie to an HTTP request header when invoking a SOAP service in ColdFusion and establish the session scope if the scope exists for the cookie. Using this procedure, you can add HTTP request header to the SOAP invocation.

As a workaround, you can pass JSessionId cookies and allow web service sessions. You can then reduce the number of invokes on every web service call.

SOAPservice.cfc

component style="document" 
{ 
 
 remote any function echoString(required string argString) 
 {       
   
  headers = GetHttpRequestData(); 
  return SerializeJSON(headers.headers); 
 } 
} 

For Axis2, use the service SOAPservice above to create the object.

invokeaxis2.cfm

<cfscript> 
       wsobj = createObject("webservice", "http://localhost:8500/path/to/soapservice.cfc?wsdl",{wsversion="2"}); 
      list = createObject("java","java.util.ArrayList").init(); 
       testHeader = createObject("java","org.apache.axis2.context.NamedValue").init("testheader","testHeadervalue"); 
       list.add(testHeader); 
       wsobj._getServiceClient().getOptions().setManageSession(true); 
       wsobj._getServiceClient().getOptions().setProperty("HTTP_HEADERS",list); 
       wsobj._getServiceClient().getOptions().setProperty("Cookie","JSESSIONID=#COOKIE["JSESSIONID"]#"); 
                    
       result = wsobj.echoString("Hello World"); 
       writeDump(result); 
</cfscript>

For Axis1, use the same service as above.

invokeaxis1.cfc

<cfscript> 
       wsobj = createObject("webservice", "http://localhost:8500/path/to/soapservice.cfc?wsdl",{wsversion="1"}); 
       headers = createObject("java","java.util.Hashtable").init(); 
       headers.put("testheader","testHeadervalue"); 
       wsobj.setMaintainSession(true); 
       wsobj._setProperty("HTTP-Request-Headers", headers); 
       wsobj._setProperty("Cookie","JSESSIONID=#COOKIE["JSESSIONID"]#"); 
       result = wsobj.echoString("Hello World"); 
       writeDump(result); 
</cfscript>

Get help faster and easier

New user?