Overriding HTTP Headers

Use southbound forward mapping to overwrite the HTTP headers of a facade operation request.

To overwrite the host, port, and URI and any other header fields, enable the southbound forward mapping for a target operation, as follows:

Procedure

  1. Create the XSLT file, such as pass-through.xsl. Refer to the Step 6 to override the fields in the request message.
  2. Copy the XSLT file (pass-through.xsl) to the ASG_CONFIG_HOME/ASG_Project/xslt directory.
  3. Click on MAPPING > Mapping tab.
  4. Click the Add Property icon.
  5. Enter the parameters as follows:

Mapping Configuration to Upload XSLT File
Parameter Description
Mapping Name Enter a name for the mapping. For example, pass-through-map.
Type Select XSLT from the drop-down list.
New File Select the XSLT file. For example, pass-through.xsl.
Existing Files Select the XSLT file (pass-through.xsl) from the drop-down list, if the XSLT is located in the ASG_CONFIG_HOME/ASG_Project/xslt directory.
Response Type Select Full from the drop-down list.

  1. Save the changes to your project.
  2. Click the PARTNER > Target Operations tab.
  3. Click the Add Property icon.
  4. Configure forward mapping for the target operation as follows:
    • Select the mapping, such as pass-through-map in the Request Transform field.
  5. Save the changes to your project.

Sample XSLT File

The following is an example XSLT to override the host, port, and URI :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:map="http://www.tibco.com/asg/mapping"
  xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"
  xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:form="http://www.tibco.com/asg/functions/form"
  xmlns:c="http://www.tibco.com/schemas/asg/context"
  xmlns:h="http://www.tibco.com/asg/protocols/http"
  xmlns:f="http://www.tibco.com/asg/content-types/form"
  xmlns:codecs="http://www.tibco.com/asg/functions/codecs"
  exclude-result-prefixes="xsl soap11 c h form codecs">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
<xsl:variable name="cnRequestHref">
   <xsl:value-of select="/transformation/cnRequest/@href"/>
</xsl:variable>
<xsl:variable name="context">
 <c:context>
 <xsl:for-each select="/transformation/context">
  <xsl:copy-of select="document(@href)/c:context/*"/>
 </xsl:for-each>
 </c:context>
</xsl:variable>
<xsl:variable name="recdRequest">
   <xsl:copy-of select="$context/c:context/c:entry[@key='asg:httpRequest']/h:request"/>
</xsl:variable>
<xsl:template match="/">
 <map:mapping-result>
  <map:context>
   <c:context>
    <xsl:for-each select="$recdRequest/h:request/h:header">
      <xsl:variable name="hdr_name" select="@name"/>
      <xsl:if test="lower-case($hdr_name)!='accept-encoding'">
      <xsl:element name="h:override-header">
	<xsl:attribute name="name"><xsl:value-of select="$hdr_name"/></xsl:attribute>
	<xsl:value-of select="."/>
      </xsl:element>
      </xsl:if>
    </xsl:for-each>
    <h:override-header name="Accept-Encoding">identity</h:override-header>
    <xsl:choose>
    <xsl:when test="string-length($recdRequest/h:request/h:query-string)>0">
      <h:override-URI><xsl:value-of select="concat($recdRequest/h:request/h:request-uri,'?',$recdRequest/h:request/h:query-string)"/></h:override-URI>
    </xsl:when>
    <xsl:otherwise>
      <h:override-URI><xsl:value-of select="$recdRequest/h:request/h:request-uri"/></h:override-URI>
    </xsl:otherwise>
    </xsl:choose>
    <h:override-method><xsl:value-of select="$recdRequest/h:request/h:method"/></h:override-method>
   </c:context>
  </map:context>
  <map:payload-xml><root><xsl:value-of select="$recdRequest/h:request/h:body"/></root></map:payload-xml>
 </map:mapping-result>
</xsl:template>
</xsl:stylesheet>
Note: For non-XML payloads, use the isBinary attribute. For example:
<map:payload isBinary="true"><xsl:value-of select="$recdRequest/h:request/h:body"/></map:payload>