<iterate expression="json-eval($)">
<target>
<sequence>
<log level="custom">
<property expression="json-eval($.tokenEndpoint)" name="tokenEndpoint"/>
</log>
<!-- Extract API Credentials -->
<property expression="json-eval($.systemName)" name="currentSystem" scope="default" type="STRING"/>
<property expression="json-eval($.tokenEndpoint)" name="TokenEndpoint" scope="default" type="STRING"/>
<header expression="json-eval($.client_id)" name="client_id" scope="transport"/>
<header expression="json-eval($.client_secret)" name="client_secret" scope="transport"/>
<property name="Content-Type" scope="transport" type="STRING" value="application/x-www-form-urlencoded"/>
<property name="Accept" scope="transport" type="STRING" value="application/json"/>
<!-- Set client_id and client_secret as headers -->
<property expression="get-property('transport', 'client_id')" name="client_id" scope="transport" type="STRING"/>
<property expression="get-property('transport', 'client_secret')" name="client_secret" scope="transport" type="STRING"/>
<property expression="get-property('TokenEndpoint')" name="uri.var.resolvedUrl" scope="default" type="STRING"/>
<log level="full">
<property expression="get-property('uri.var.resolvedUrl')" name="Final Resolved Token URL"/>
</log>
<call>
<endpoint>
<http format="rest" method="get" uri-template="{uri.var.resolvedUrl}">
<suspendOnFailure>
<initialDuration>-1</initialDuration>
<progressionFactor>-1</progressionFactor>
<maximumDuration>0</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
</markForSuspension>
</http>
</endpoint>
</call>
<!-- Capture API Response -->
<enrich>
<source clone="true" type="body"/>
<target property="apiResponse" type="property"/>
</enrich>
<!-- Log API Response -->
<log level="full">
<property expression="get-property('currentSystem')" name="System"/>
<property name="Step" value="Received API Response"/>
<property expression="get-property('apiResponse')" name="API Response"/>
</log>
<respond/>
</sequence>
</target>
</iterate>
I am working on a WSO2 API Manager / Enterprise Integrator project where I need to fetch access tokens from multiple external authentication endpoints (e.g., TalkTalk, Vodafone). These tokens need to be stored and reused until they expire, to avoid making redundant requests.
- Fetch the token from the external endpoint using a call mediator.
- Store it in a property (scope="default").
- Reuse the token for subsequent API calls.