Search code examples
wso2wso2-api-managerapi-manager

WSO2 API manager prototype API HTTP response status


I am using the inline javascript prototype feature in the WSO2 API manager and I'm trying to set different HTTP response statuses. Is this possible? If so how is it done?

So far I have tried setting the HTTP_SC property but this doesn't seem to have any effect. mc.setProperty('HTTP_SC', "404");


Solution

  • I had the same requirement and after much exploring under the hood was able to find a workable solution.

    The reason why setting the property:

    mc.setProperty('HTTP_SC', "404");
    

    didn't work is that the property needs to be set in the axis2 scope (as Abimaran said). mc.setProperty doesn't set it on that scope. Moreover, the MessageContext object doesn't provide a way to set the scope.

    The 'Deploy as Prototype' action actually creates the API definition file by merging the specified in-line script into the a velocity template and storing the resulting API definition into a file.

    • Template: ./repository/resources/api_templates/prototype_template.xml
    • Output location: repository/deployment/server/synapse-configs/default/api/

    The output file will have a name in the format:

    provider--API Name-vVERSION.xml

    where provider appears to be the username of the API creator.

    What I did was add a filter to the template:

    <filter source="boolean(get-property('HTTP_SC'))" regex="false">
        <then>
            <property name="HTTP_SC" value="200" scope="axis2"/>
        </then>
        <else>
            <property name="HTTP_SC" expression="get-property('HTTP_SC')" scope="axis2"/>
        </else>
    </filter>
    

    I added it immediately after a similar block (for handling CONTENT_TYPE) at the start of the inSequence element.