Saturday, March 15, 2014

Mule REST on Tomcat (via Jersey)

I. Dependencies
  1. Mule server libraries (Mule standalone 3.3.x or later)
  2. Tomcat
  3. Eclipse (any IDE capable of the same)
II. Prerequisites
  1. Install Mule on Tomcat
  2. Create a Dynamic Web Application project in Eclipse and set Tomcat as deploy server
III. Design


IV. Service Class
 package com.seralde.rest.service;



import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.seralde.rest.entity.SampleEO;

@Path("/")
public class HelloWorldService {
   @GET
   public Response defaulMethod(){


      String output = "Hello World!";


      return Response.status(200).entity(output).build();
   }


   @GET
   @Path("/echo/{param}")
   public Response getMsg(@PathParam("param") String msg) {


      String output = "Hello " + msg + "!";


      return Response.status(200).entity(output).build();
   }


   @GET
   @Path("/eo")
   @Produces(MediaType.APPLICATION_JSON)
   public SampleEO getEO() {
      SampleEO eo = new SampleEO();
      eo.setAge(10);
      eo.setName("Juan dela Cruz");
      return eo;
   }


}

V. Entity/Model Class
 package com.seralde.rest.entity;



public class SampleEO {
   private String name;
   private int age;


   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
}

VI. Mule Config
<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:core="http://www.mulesoft.org/schema/mule/core" 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"
   xmlns:servlet="http://www.mulesoft.org/schema/mule/servlet"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core       http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-current.xsd
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.mulesoft.org/schema/mule/json    http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/servlet    http://www.mulesoft.org/schema/mule/servlet/current/mule-servlet.xsd">


   <spring:beans>
      <spring:import resource="classpath:sampleRestAppContext.xml"/>
   </spring:beans>


   <flow name="restappFlow1" doc:name="restappFlow1">


   <servlet:inbound-endpoint path="restService" responseTimeout="10000"     doc:name="Servlet"/>


   <jersey:resources doc:name="REST">
      <!--<component class="com.seralde.rest.HelloWorldService"/> -->
      <component>
         <spring-object bean="helloWorldService"/>
      </component>
   </jersey:resources>
   </flow>
</mule>

VII. Spring Context
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation=" http://www.springframework.org/schema/aop    http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context    http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx    http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


<bean id="helloWorldService" class="com.seralde.rest.service.HelloWorldService"/>
</beans>

VIII. WEB.XML

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
   <display-name>sample-rest</display-name>


   <context-param>
      <param-name>org.mule.config</param-name>
      <param-value>mule-config-rest.xml</param-value>
   </context-param>
   <listener>
      <listener-class>
        org.mule.config.builders.MuleXmlBuilderContextListener
      </listener-class>
   </listener>
   <servlet>
      <servlet-name>muleServlet</servlet-name>
      <servlet-class>
        org.mule.transport.servlet.MuleReceiverServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>


   <servlet-mapping>
      <servlet-name>muleServlet</servlet-name>
      <url-pattern>/services/*</url-pattern>
   </servlet-mapping>
</web-app>

IX. DOWNLOAD SAMPLE PROJECT
Download Project HERE

See MuleSoft (Mule ESB)