Over a million developers have joined DZone.

Creating REST Service Using Mule ESB 3.3

· Integration Zone

Learn how API management supports better integration in Achieving Enterprise Agility with Microservices and API Management, brought to you in partnership with 3scale

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 !!


Unleash the power of your APIs with future-proof API management - Create your account and start your free trial today, brought to you in partnership with 3scale.

Topics:

Published at DZone with permission of Abhishek Somani .

Opinions expressed by DZone contributors are their own.

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

{{ parent.tldr }}

{{ parent.urlSource.name }}