Rest service Hello World with Restlet
Tools and Technologies used
Project structure
Step 1
Create a new Maven project with name “RestletHelloWold” in eclipse.
Refer Step 1 in this article for the same.
Step 2
Add the Restlet related dependencies to pom.xml
- <project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
- http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>RestletHelloWorld</groupId>
- <artifactId>RestletHelloWorld</artifactId>
- <packaging>war</packaging>
- <version>0.0.1-SNAPSHOT</version>
- <name>RestletHelloWorld Maven Webapp</name>
- <url>http://maven.apache.org</url>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.restlet.jee</groupId>
- <artifactId>org.restlet</artifactId>
- <version>2.3.4</version>
- </dependency>
- <dependency>
- <groupId>org.restlet.jee</groupId>
- <artifactId>org.restlet.ext.jaxrs</artifactId>
- <version>2.3.2</version>
- </dependency>
- <dependency>
- <groupId>org.restlet.jee</groupId>
- <artifactId>org.restlet.ext.servlet</artifactId>
- <version>2.3.4</version>
- </dependency>
- </dependencies>
- <repositories>
- <repository>
- <id>maven-restlet</id>
- <name>Public Restlet repository</name>
- <url>http://maven.restlet.org</url>
- </repository>
- </repositories>
- <build>
- <finalName>RestletHelloWorld</finalName>
- </build>
- </project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>RestletHelloWorld</groupId> <artifactId>RestletHelloWorld</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>RestletHelloWorld Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.restlet.jee</groupId> <artifactId>org.restlet</artifactId> <version>2.3.4</version> </dependency> <dependency> <groupId>org.restlet.jee</groupId> <artifactId>org.restlet.ext.jaxrs</artifactId> <version>2.3.2</version> </dependency> <dependency> <groupId>org.restlet.jee</groupId> <artifactId>org.restlet.ext.servlet</artifactId> <version>2.3.4</version> </dependency> </dependencies> <repositories> <repository> <id>maven-restlet</id> <name>Public Restlet repository</name> <url>http://maven.restlet.org</url> </repository> </repositories> <build> <finalName>RestletHelloWorld</finalName> </build> </project>
We have defined a maven restlet Repository to download the Restlet related dependencies.
Step 3
Update web.xml file with Restlet servlet container
- <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd" >
- <web-app>
- <display-name>Archetype Created Web Application</display-name>
- <context-param>
- <param-name>org.restlet.application</param-name>
- <param-value>com.kb.rest.MyRestletApplication</param-value>
- </context-param>
- <servlet>
- <servlet-name>RestletServlet</servlet-name>
- <servlet-class>
- org.restlet.ext.servlet.ServerServlet
- </servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>RestletServlet</servlet-name>
- <url-pattern>/rest/*</url-pattern>
- </servlet-mapping>
- </web-app>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>org.restlet.application</param-name> <param-value>com.kb.rest.MyRestletApplication</param-value> </context-param> <servlet> <servlet-name>RestletServlet</servlet-name> <servlet-class> org.restlet.ext.servlet.ServerServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>RestletServlet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app>
We have defined the context param to point the application class where the Restlet servlet has to look for any resource mapping class.
In our case, it is MyRestletApplication class which will assist the Restlet service to find the mapping resource.
Step 4
Create the MyRestletApplication class
- package com.kb.rest;
- import org.restlet.Application;
- import org.restlet.Context;
- import org.restlet.Restlet;
- import org.restlet.routing.Router;
- public class MyRestletApplication extends Application {
- public MyRestletApplication(Context parentContext) {
- super(parentContext);
- }
- @Override
- public Restlet createInboundRoot() {
- Router router = new Router(getContext());
- router.attach("/hello", HelloWorldRestService.class);
- return router;
- }
- }
package com.kb.rest; import org.restlet.Application; import org.restlet.Context; import org.restlet.Restlet; import org.restlet.routing.Router; public class MyRestletApplication extends Application { public MyRestletApplication(Context parentContext) { super(parentContext); } @Override public Restlet createInboundRoot() { Router router = new Router(getContext()); router.attach("/hello", HelloWorldRestService.class); return router; } }
This class maps the request URL to appropriate Rest service class.
In our case, it is “/hello” which is mapped to HelloWorldRestService class.
Step 5
Create the Rest service class
- package com.kb.rest;
- import javax.ws.rs.Path;
- import javax.ws.rs.Produces;
- import javax.ws.rs.core.MediaType;
- import org.restlet.resource.Get;
- import org.restlet.resource.ServerResource;
- @Path("/hello")
- public class HelloWorldRestService extends ServerResource {
- @Get
- @Produces(MediaType.TEXT_PLAIN)
- public String getMessage(){
- return "Restlet Hello World";
- }
- }
package com.kb.rest; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.restlet.resource.Get; import org.restlet.resource.ServerResource; @Path("/hello") public class HelloWorldRestService extends ServerResource { @Get @Produces(MediaType.TEXT_PLAIN) public String getMessage(){ return "Restlet Hello World"; } }
@Path – to specify the root path of the resource which is “/hello”
@GET – It’s the HTTP method that is supported by the service
@Produces – It’s used to specify the MIME type that service is supporting which is Plain Text here.
Step 6
Build and Deploy the project in the Tomcat server
Step 7
Start the server
Step 8
Access the Rest service using below URL
http://localhost:8080/RestletHelloWorld/rest/hello