Creating Rest Services with Mule is very easy as mule provides built in support for Jersey. Create mule flow in mule studio like this .
create a Rest class like this and link it to rest component :
create a Rest class like this and link it to 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 like :
<?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 spring created bean in the rest Component , then first declare the component as 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 !!