Friday, 26 July 2013


Restlet is a lightweight, comprehensive, open source REST framework for the Java platform. Restlet is suitable for both server and client Web applications. It supports major Internet transport, data format, and service description standards like HTTP and HTTPS, SMTP, XML, JSON, Atom, and WADL. A GWT port of the client-side library is also available. (Reference: http://en.wikipedia.org/wiki/Restlet)

Hello World Example

  • Project Structure


  • RestletApplication.java


package com.restlet.demo.application;

import org.restlet.Application;
import org.restlet.Restlet;
import org.restlet.routing.Router;

import com.restlet.demo.resource.HelloWorldResource;

public class RestletApplication extends Application{ 
    public synchronized Restlet createInboundRoot() {
        Router router = new Router(getContext());
        router.attach("/helloWorld",HelloWorldResource.class );
        return router;
    }
}


  • ResponseParseFactory.java

package com.restlet.demo.core;

import java.util.LinkedHashMap;

import org.apache.log4j.Logger;
import org.json.simple.JSONValue;

public class ResponseParseFactory {
 
 static Logger logger = Logger.getLogger(ResponseParseFactory.class);

 @SuppressWarnings({ "rawtypes", "unchecked" })
 public String getFailureJsonString(String msg){
  String jsonString = "";
  LinkedHashMap list = new LinkedHashMap();
  list.put("response_status", "false");
  
  list.put("result", msg+"");
  jsonString = JSONValue.toJSONString(list);
  logger.info(jsonString);
  return jsonString;
 }
 
 @SuppressWarnings({ "rawtypes", "unchecked" })
 public String getSuccessJsonString(String msg){
  String jsonString = "";
  LinkedHashMap list = new LinkedHashMap();
  list.put("response_status","true");

  list.put("result", msg);
  jsonString = JSONValue.toJSONString(list);
  logger.info(jsonString);
  return jsonString;
 }
}

  • BaseResource.java

package com.restlet.demo.resource;

import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.json.JSONObject;
import org.json.simple.parser.JSONParser;
import org.restlet.data.Form;
import org.restlet.data.MediaType;
import org.restlet.data.Parameter;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.representation.StringRepresentation;
import org.restlet.resource.Get;
import org.restlet.resource.Post;
import org.restlet.resource.ServerResource;

import com.restlet.demo.core.ResponseParseFactory;

public abstract class BaseResource extends ServerResource{

  protected ResponseParseFactory parseFactory = null;
  protected Logger logger = Logger.getLogger(BaseResource.class);
  String jsonString="";
  
 @SuppressWarnings("rawtypes")
 @Post("json")
 public Representation doPost(Representation entity){
  Map json =null;
  jsonString = "";
  parseFactory = new ResponseParseFactory();
  try {
   JsonRepresentation represent = new JsonRepresentation(entity);
   JSONObject jsonobject = represent.getJsonObject();
   JSONParser parser = new JSONParser();
   String jsonText = jsonobject.toString();
   json = (Map) parser.parse(jsonText);
   jsonString = processRequest(json,"post");
  } catch (Exception e) {
   e.printStackTrace();
   jsonString = parseFactory.getFailureJsonString(e.getMessage());
  }
  return new StringRepresentation(jsonString, MediaType.APPLICATION_JSON);
 }
 
 
 @SuppressWarnings("rawtypes")
 @Get
 public Representation doGet(){
  Map json =null;
  parseFactory = new ResponseParseFactory();
  jsonString = "";
  try {
   json = getMapFromParam(getRequest().getResourceRef().getQueryAsForm());
   parseFactory = new ResponseParseFactory();
   jsonString = processRequest(json,"get");

  } catch (Exception e) {
   e.printStackTrace();
   jsonString = parseFactory.getFailureJsonString(e.getMessage());
  }
  return new StringRepresentation(jsonString, MediaType.APPLICATION_JSON);
 }
 
 public abstract String processRequest(Map json,String method);
  
 public static Map<String, String> getMapFromParam(Form form) {
  Map<String, String> map = new HashMap<String, String>();
  for (Parameter parameter : form) {
   map.put(parameter.getName(), parameter.getValue());
  }
  return map;
 }
 
}


  • HelloWorldResource.java

package com.restlet.demo.resource;

import java.util.Map;

import com.restlet.demo.core.ResponseParseFactory;

public class HelloWorldResource extends BaseResource {

 public String processRequest(Map json, String method) {
  String returnString = "" ;
  returnString = new ResponseParseFactory().getSuccessJsonString("Hello " + json.get("user"));
  return returnString;
 }
}

  • log4j.properties

# -----------------------------
# Appender to write to console.
# -----------------------------
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.CONSOLE.file =${catalina.base}/logs/regularLogging.log
log4j.appender.CONSOLE.MaxFileSize=100KB

# ---------------------------------------------
# Appender to write to application log.
# ---------------------------------------------
log4j.appender.APPLICATIONLOG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.APPLICATIONLOG.File=${catalina.base}/logs/restlet-demo.log
log4j.appender.APPLICATIONLOG.DatePattern='.'yyyy-MM-dd
#log4j.appender.APPLICATIONLOG.File=/home/devphp/public_html/restletframework/logs/APPLICATION-LOG.log
log4j.appender.APPLICATIONLOG.Encoding=UTF-8
log4j.appender.APPLICATIONLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.APPLICATIONLOG.layout.ConversionPattern=%d [%5p]: %m%n

# Turn off root logging.
#log4j.rootLogger=info, APPLICATIONLOG
log4j.rootLogger=info, CONSOLE , APPLICATIONLOG


  • 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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>RestletDemo</display-name>
 <servlet>
  <servlet-name>RestletServlet</servlet-name>
  <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
  <init-param>
   <param-name>org.restlet.application</param-name>
   <param-value>com.restlet.demo.application.RestletApplication</param-value>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/service/*</url-pattern>
 </servlet-mapping>
</web-app>


  • Calling Hello World Web Service


Thanks

13 comments:

  1. Trank's..


    what's, libraries from restlet ?

    ReplyDelete
  2. You can find the libraries from Project Structure Image under "lib" folder.

    ReplyDelete
    Replies
    1. hey sunil where i can buy your book in the market in delhi
      Please rply to gaurav_radaur@live.com

      Delete
  3. Hello, nice demo! What version is the restlet library that you used?

    ReplyDelete
    Replies
    1. Restlet version is 2.0. You can use the latest version also. As new versions are backward compatible.

      Delete
  4. nice demo of JSON-speaking restlet/servlet! Simple...the hardest part for me was rounding up the libs.
    Recommend u change POST to store the name (and not return it in the result) and change GET to return the name in the result. I added that bit of code but would be curious to see how u would achieve it.

    ReplyDelete
  5. This comment has been removed by the author.

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete

  7. The best way to protect your expensive smartphone is by using a case.
    It not only protects your phone from damage due to accidental drop, but also imparts beauty to your phone.
    Here are some of the best and exclusive cases for you.
    You can check them out and select one for your phone Galaxy S8 TPU Cases

    ReplyDelete
  8. very impressive post for making good quality link without harm own website…

    Digital Marketing

    ReplyDelete
  9. "Great blog created by you. I read your blog, its best and useful information. You have done a great work. Super blogging and keep it up.php jobs in hyderabad.
    "

    ReplyDelete
  10. can you send the sample to download

    ReplyDelete
  11. Great Information
    "Sanjary Academy provides excellent training for Piping design course. Best Piping Design Training Institute in Hyderabad,
    Telangana. We have offer professional Engineering Course like Piping Design Course,QA / QC Course,document Controller
    course,pressure Vessel Design Course, Welding Inspector Course, Quality Management Course, #Safety officer course."
    Piping Design Course in India­
    Piping Design Course in Hyderabad
    QA / QC Course
    QA / QC Course in india
    QA / QC Course in Hyderabad
    Document Controller course
    Pressure Vessel Design Course
    Welding Inspector Course
    Quality Management Course
    Quality Management Course in india
    Safety officer course

    ReplyDelete

Find me on Facebook! Follow me on Twitter!