{{ !articles[0].partner.isSponsoringArticle ? "Platinum" : "Portal" }} Partner
java,enterprise-integration,web service,integration,tips and tricks,wso2,wso2 esb,restful ws,wso2 esb mediators


Since Representational State Transfer (REST)  is becoming more popular, this post illustrates the process of getting the REST api from wso2 ESB concepts through the XML.
<api xmlns="http://ws.apache.org/ns/synapse" name="MY_API" context="/student">
           <resource methods="GET" url-mapping="/list" inSequence="sequence1" outSequence="sequence2"/>

Steps of the Flow

  1. When request is dispatched to a resource it will be mediated through the in-sequence of the resource
  2. At the end of the in-sequence the request will be forwarded to a back-end service for further processing
  3. Responses coming from the back-end system are mediated through the out-sequence of the resource
  4. Fault-sequence can be defined to handle any errors while mediating a message through a resource

API context

Each API is anchored at a user-defined URL context same as web application concept. Therefore  API will only process requests that fall under its URL context. (you can defined hostname and/or a port number)


if a particular API is anchored at the context “/student”, only HTTP requests whose URL path starts with “/student” will be handled by that API(MY_API).

Resource mapping to URL mapping or URI template

A resource can be associated with a user-defined URL mapping or URI template.
A resource can also be bound to a specific subset of HTTP verbs and header values

  • GET /test/foo/bar
  • GET /test/foo/a?arg1=hello

URL mapping can have Path mappings (/student/*), Extension mappings (*.html) or Exact mappings ( /student/james)

URI templates can be /student/{grade}/ OR /student/{grade}/{studentId}

<api name="MY_API2" context="/student">

<resource url-mapping="/{grade}" methods="GET" inSequence="sequence3" outSequence="sequence4"/>

<resource uri-template="/{grade}/{studentId}" methods="GET POST" inSequence="sequence5" outSequence="sequence6"/>


Try out with ESB

The ESB provides access to the exact values of the template variables through message context properties as below

<log level="custom">
   <property name="Grade" expression="get-property('uri.var.grade’)"/>
   <property name="StudentId" expression="get-property('uri.var.studentId’)"/>

Demo Code


<api xmlns="http://ws.apache.org/ns/synapse" name="MY_API" context="/student">
   <resource methods="GET" uri-template="/{grade}/{studentId}" inSequence="sequence1" outSequence="sequence2"/>


<sequence xmlns="http://ws.apache.org/ns/synapse" name="sequence1">
   <log level="custom">
      <property xmlns:ns="http://org.apache.synapse/xsd" name="Grade" expression="get-property('uri.var.grade')"/>
      <property xmlns:ns="http://org.apache.synapse/xsd" name="StudentId" expression="get-property('uri.var.studentId')"/>

Calling URL:: http://localhost:8280/student/grade1/12


Console log is

[2014-01-07 19:02:44,076]  INFO - LogMediator Grade = grade1, StudentId = 12


Published at DZone with permission of {{ articles[0].authors[0].realName }}, DZone MVB. (source)

Opinions expressed by DZone contributors are their own.

{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks