Hello
I would like to set a variable to manage token expiration according to custom attribute coming from application or product
Instead of having different steps in preflow I would like to manage this in only one AssignMessage Policy as following
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><AssignMessage async="false" continueOnError="false" enabled="true" name="SetExpirationTime"> <DisplayName>SettExpirationTime</DisplayName> <Properties/> <AssignVariable> <Condition>verifyapikey.VerifyClientId.token_expiration != null</Condition> <Name>opevar.token_expiration</Name> <Ref>verifyapikey.VerifyClientId.token_expiration</Ref> </AssignVariable> <AssignVariable> <Condition>(verifyapikey.VerifyClientId.apiproduct.token_expiration != null) and (opevar.token_expiration = null) </Condition> <Name>opevar.token_expiration</Name> <Ref>verifyapikey.VerifyClientId.apiproduct.token_expiration</Ref> </AssignVariable> <AssignVariable> <Condition>opevar.token_expiration = null</Condition> <Name>opevar.token_expiration</Name> <Value>3600</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/></AssignMessage>
Condition section seems to be available by AssignMessage policy, but the execution doesn't work
Ant idea ?
Thank you
No, you cannot insert a Condition as a child of the AssignVariable element. The configuration you are suggesting will not work.
I suggest you accomplish your goal with a JS policy.
<Javascript name='JS-SetExpirationTime' timeLimit='200' > <Source> var exp = context.getVariable('verifyapikey.VerifyClientId.apiproduct.token_expiration'); if (exp) { context.setVariable('opevar.token_expiration', exp); } else { exp = context.getVariable('verifyapikey.VerifyClientId.apiproduct.token_expiration'); if (exp) { context.setVariable('opevar.token_expiration', exp); } else { context.setVariable('opevar.token_expiration', '3600'); } } </Source> </Javascript>
It might be interesting for Apigee to introduce a new function "coalesce" which would return the first non-null value. It would allow a more compact expression of what you want to accomplish, something like:
<AssignVariable> <Name>opevar.token_expiration</Name> <Template>{coalesce(verifyapikey.VerifyClientId.token_expiration,verifyapikey.VerifyClientId.apiproduct.token_expiration,3600)}</Template> </AssignVariable>
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |