Contact Us 1-800-596-4880

Set a SOAP Header

Add SOAP headers declared in your WSDL to outbound responses from an APIkit for SOAP application. This walkthrough extends the OrderTshirt flow and DataWeave so the response includes header data such as APIUsageInformation. Download tshirt2.wsdl, complete prerequisites for Using APIkit for SOAP, and create an APIkit for SOAP project before you begin.

  1. In Anypoint Studio, open tshirt2.wsdl in src/main/resources/api and scroll to the APIUsageInformation element, which is the element expected by the contract.

  2. On the canvas, select Transform Message in the OrderTshirt:/soapkit-config flow.

    The following DataWeave code is available:

    {
    	body : {
    		ns0#OrderTshirtResponse: {
    			orderId: "I got a request from "
    			++ payload.body.ns0#OrderTshirt.name
    			++ " using the following auth header "
    			++ (payload.headers["AuthenticationHeader"].ns0#AuthenticationHeader.apiKey default "")
    		}
    	} write "application/xml"
    }
  3. Add the following APIUsageInformation header declaration:

    {
    	body : {
    		ns0#OrderTshirtResponse: {
    			orderId: "I got a request from "
    			++ payload.body.ns0#OrderTshirt.name
    			++ " using the following auth header "
    			++ (payload.headers["AuthenticationHeader"].ns0#AuthenticationHeader.apiKey default "")
    		}
    	} write "application/xml",
    
    	headers: { (1)
    		header: {
    			ns0#APIUsageInformation: {
    			}
    		} write "application/xml"
    	}
    
    }
    1 This DataWeave code adds headers to the output of the Transform Message component.
  4. Add the apiCallsRemaining header to the APIUsageInformation element:

    {
    	body : {
    		ns0#OrderTshirtResponse: {
    			orderId: "I got a request from "
    			++ payload.body.ns0#OrderTshirt.name
    			++ " using the following auth header "
    			++ (payload.headers["AuthenticationHeader"].ns0#AuthenticationHeader.apiKey default "")
    		}
    	} write "application/xml",
    
    	headers: {
    		header: {
    			ns0#APIUsageInformation: {
    				apiCallsRemaining: 10 (1)
    			}
    		} write "application/xml"
    	}
    
    }
    1 Set apiCallsRemaining to 10.
  5. Save and run the project again.

  6. In SoapUI, execute the OrderTshirt request again.

    The response envelope from APIkit for SOAP is:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Header>
      <ns0:APIUsageInformation xmlns:ns0="http://mulesoft.org/tshirt-service">
         <apiCallsRemaining>10</apiCallsRemaining>
      </ns0:APIUsageInformation>
   </soap:Header>
   <soap:Body>
      <ns0:OrderTshirtResponse xmlns:ns0="http://mulesoft.org/tshirt-service">
         <orderId>I got a request from John, using the following auth header 987654321</orderId>
      </ns0:OrderTshirtResponse>
   </soap:Body>
</soap:Envelope>