Enterprise Integration Zone is brought to you in partnership with:

Abhishek has posted 1 posts at DZone. View Full User Profile

Creating REST Service Using Mule ESB 3.3

04.10.2013
| 8843 views |
  • submit to reddit
Creating Rest Services with Mule is very easy as mule provides built-in support for Jersey.

Create mule flow in mule studio like this.


First, create a REST class like this and link it to the REST component:
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;


@Path("restClass")
public class RestClass {

 public Response getExample(@QueryParam("param1")String param1)
 {
  return Response.status(Status.OK).entity("hello " + param1).build();
 }
 
}
This is how the Mule flow xml will look:
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:jersey="http://www.mulesoft.org/schema/mule/jersey" 
xmlns:http="http://www.mulesoft.org/schema/mule/http" 
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
xmlns:spring="http://www.springframework.org/schema/beans" version="CE-3.3.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/jersey http://www.mulesoft.org/schema/mule/jersey/current/mule-jersey.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">
    <flow name="restTestFlow1" doc:name="restTestFlow1">
        <http:inbound-endpoint exchange-pattern="request-response" 
host="localhost" port="8081" doc:name="HTTP"/>
        <jersey:resources doc:name="REST">
            <component class="RestClass"/>
         </jersey:resources>
    </flow>
</mule>
If you want to use the created spring bean in the rest Component, then first declare the component as a spring bean and then refer it in the jersey-resource using spring-object tag , like this:
<flow name="restTestFlow1" doc:name="restTestFlow1">

     <http:inbound-endpoint exchange-pattern="request-response" host="localhost"
 port="8081" doc:name="HTTP"/>
       <spring:bean id="testBean" class="TestSpringBean"></spring:bean>
    <spring:bean id="restClass">
      <spring:property name="bean" ref="testBean"></spring:property>
    </spring:bean>

        <jersey:resources doc:name="REST">
            <component doc:name="rest component">
             <spring-object bean="restClass">
            </component>
        </jersey:resources>
</flow>
You can use multiple REST classes also , like this:
<jersey:resources doc:name="REST">
   <component>
    <spring-object bean="restService" />
   </component>
   <component>
    <spring-object bean="restService1" />
   </component>
  </jersey:resources>
Mule Studio throws error "Required attribute class is not defined in component" , you can ignore this error, as it runs perfectly fine.

Post your suggestions !!


Published at DZone with permission of its author, Abhishek Somani. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)