# used in Request URI Template Param

Hello I have a URI of the format - -

/apis/v1.0/customers/{customer-id}/addresses/{address-key}

/apis/v1.0/customers/11111/addresses/Address##3 that corresponds to

address-key gets mapped to later a body-param for which i am using the extract and then assign message policy as follows.

<URIPath name="address-key">
<Pattern>**/addresses/{address-key}</Pattern>
</URIPath>

<Source clearPayload="false">request</Source>
<VariablePrefix>editAddress</VariablePrefix>

Assign Message:

<FormParams>
<!-- only params that differs from Assign Message-address can merge later-->
<FormParam name="addressId">{editAddress.address-key}</FormParam>

I am facing an issue while retreiving the {address-key} param if it contains #. E.g Value such as Address#3 are truncated and read as Address only.


I tried to pass

{address-key} value as Address%233 but it gets interpreted as below before hitting the target url (% gets decoded as %25)

addressId=Address%25233

But this doesn't work for us so we need some way to pass original value of Address#3. We are using

application/x-www-form-urlencoded while passing the body but since of Address#3 is in URI template it is truncated. Any suggestion how to pass original value of Address#3.

thanks,

aakash

0 3 365
3 REPLIES 3

sydub7
New Member

Hello @Aakash Sharma : You can try attaching a JS extension after Extract Variables:

-----------------------

Extract Variable

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables-1</DisplayName>

<Properties/>

<URIPath> <Pattern ignoreCase="true">**/addresses/{addressKey}</Pattern> </URIPath>

<Source clearPayload="false">request</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>

</ExtractVariables>

---------------------------

JS Code

var addressId = unescape(context.getVariable('addressKey')); context.setVariable('addressId',addressId)

----------------------------

Request URI

Send the request as : /customers/11111/addresses/address%233

---------------------------

Attach is the screenshot for your reference

5858-screen-shot-2017-11-02-at-43402-pm.png

Thanks that seem to work. Except that it was creating a duplicate variable if i just used

context.setVariable('addressId',addressId).

So i am using -

var addressId = unescape(context.getVariable('editAddress.address-key'));
context.removeVariable('editAddress.address-key');
print("Address Id: ", addressId);
context.setVariable('editAddress.address-key',addressId);

Hey @Aakash Sharma - Great to know it worked out for you. Would you please accept the answer by clicking the link and close it ? This way it would help others community member too.