1
Hello World RESTful web service tutorial
Balázs Simon (sbalazs@iit.bme.hu), BME IIT, 2015
1 Introduction
This document describes how to create a Hello World RESTful web service in Eclipse using JAX-RS and
WildFly.
2 RESTful service
Create a new Dynamic Web Project in Eclipse called HelloRest. Make sure to select Generate web.xml
deployment descriptor at the end of the wizard. The web project should look like this:
2
The JAX-RS annotated classes will be handled by a special servlet. This servlet must be declared in the
web.xml file. Change the web.xml file so that it contains the following lines shown with yellow
background:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<display-name>HelloRest</display-name>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
Create a new interface called IHello and a class called Hello in the src folder under the package
hellorest:
3
The IHello.java should contain the following code:
package hellorest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
@Path("hello")
public interface IHello {
@GET
@Path("sayHello")
public String sayHello(@QueryParam("name") String name);
}
The Hello.java should contain the following code:
package hellorest;
public class Hello implements IHello {
@Override
public String sayHello(String name) {
return "Hello: "+name;
}
}
Deploy the application to the server. It should be deployed without errors:
To test the service, type the following URL into a browser (FireFox, Chrome, IE, etc.):
http://localhost:8080/HelloRest/rest/hello/sayHello?name=me
The response should be:
4
The URL has the following structure:
 http://localhost:8080 – the protocol, domain name and port number of the server
 /HelloRest – the name of the web application
 /rest – the mapping of the REST servlet in the web.xml file
 /hello – the @Path mapping of the IHello interface
 /sayHello – the @Path mapping of the sayHello operation
 ?name=me – the name and value passed as a @QueryParam
3 HTML client
Create an HTML file called HelloClient.html under the WebContent folder:
The contents of the file should be the following:
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Hello REST client</title>
</head>
<body>
<form method="get" action="rest/hello/sayHello">
Type your name: <input type="text" name="name"/>
<input type="submit" value="Say hello"/>
</form>
</body>
</html>
5
Redeploy the application to the server, and open the following URL in a browser:
http://localhost:8080/HelloRest/HelloClient.html
This is where the HTML is accessible. The following page should be loaded in the browser:
Type something in the text field and click the Say hello button:
The result should be the following:
4 Java client using RESTeasy
RESTeasy is the JAX-RS implementation of the WildFly server. It also has a client library, which can be
used in console applications. This example will show how.
RESTeasy requires some additional dependencies, so the easiest way to create a client is to use Maven.
Create a new Maven Project in Eclipse called HelloRestClient:
6
Click Next, and select the Create a simple project check-box:
Click Next and type HelloRestClient for both Group Id and Artifact Id:
7
Click Finish, and the project should look like this:
Edit the pom.xml and add the following lines shown with yellow background:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>HelloRestClient</groupId>
<artifactId>HelloRestClient</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.10.Final</version>
</dependency>
</dependencies>
</project>
4.1 Untyped client
Create a new class called UntypedHelloClient under the package hellorestclient with the following
content:
package hellorestclient;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
public class UntypedHelloClient {
public static void main(String[] args) {
try{
// Create a new RESTeasy client through the JAX-RS API:
Client client = ClientBuilder.newClient();
// The base URL of the service:
WebTarget target = client.target("http://localhost:8080/HelloRest/rest");
8
// Building the relative URL manually for the sayHello method:
WebTarget hello =
target.path("hello").path("sayHello").queryParam("name", "me");
// Get the response from the target URL:
Response response = hello.request().get();
// Read the result as a String:
String result = response.readEntity(String.class);
// Print the result to the standard output:
System.out.println(result);
// Close the connection:
response.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
The project should look like this:
Right click on the UntypedHelloClient.java and select Run As > Java Application. It should print the
following:
9
4.2 Typed client
Create an interface called IHello under the package hellorestclient with the following content:
package hellorestclient;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.QueryParam;
@Path("hello")
public interface IHello {
@GET
@Path("sayHello")
public String sayHello(@QueryParam("name") String name);
}
Create a class called TypedHelloClient under the package hellorestclient with the following content:
package hellorestclient;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
public class TypedHelloClient {
public static void main(String[] args) {
try {
// Create a new RESTeasy client through the JAX-RS API:
Client client = ClientBuilder.newClient();
// The base URL of the service:
WebTarget target = client.target("http://localhost:8080/HelloRest/rest");
// Cast it to ResteasyWebTarget:
ResteasyWebTarget rtarget = (ResteasyWebTarget)target;
// Get a typed interface:
IHello hello = rtarget.proxy(IHello.class);
// Call the service as a normal Java object:
String result = hello.sayHello("me");
// Print the result:
System.out.println(result);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Right click on the TypedHelloClient.java and select Run As > Java Application. It should print the
following:

Rest hello world_tutorial

  • 1.
    1 Hello World RESTfulweb service tutorial Balázs Simon ([email protected]), BME IIT, 2015 1 Introduction This document describes how to create a Hello World RESTful web service in Eclipse using JAX-RS and WildFly. 2 RESTful service Create a new Dynamic Web Project in Eclipse called HelloRest. Make sure to select Generate web.xml deployment descriptor at the end of the wizard. The web project should look like this:
  • 2.
    2 The JAX-RS annotatedclasses will be handled by a special servlet. This servlet must be declared in the web.xml file. Change the web.xml file so that it contains the following lines shown with yellow background: <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <display-name>HelloRest</display-name> <servlet-mapping> <servlet-name>javax.ws.rs.core.Application</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app> Create a new interface called IHello and a class called Hello in the src folder under the package hellorest:
  • 3.
    3 The IHello.java shouldcontain the following code: package hellorest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; @Path("hello") public interface IHello { @GET @Path("sayHello") public String sayHello(@QueryParam("name") String name); } The Hello.java should contain the following code: package hellorest; public class Hello implements IHello { @Override public String sayHello(String name) { return "Hello: "+name; } } Deploy the application to the server. It should be deployed without errors: To test the service, type the following URL into a browser (FireFox, Chrome, IE, etc.): http://localhost:8080/HelloRest/rest/hello/sayHello?name=me The response should be:
  • 4.
    4 The URL hasthe following structure:  http://localhost:8080 – the protocol, domain name and port number of the server  /HelloRest – the name of the web application  /rest – the mapping of the REST servlet in the web.xml file  /hello – the @Path mapping of the IHello interface  /sayHello – the @Path mapping of the sayHello operation  ?name=me – the name and value passed as a @QueryParam 3 HTML client Create an HTML file called HelloClient.html under the WebContent folder: The contents of the file should be the following: <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Hello REST client</title> </head> <body> <form method="get" action="rest/hello/sayHello"> Type your name: <input type="text" name="name"/> <input type="submit" value="Say hello"/> </form> </body> </html>
  • 5.
    5 Redeploy the applicationto the server, and open the following URL in a browser: http://localhost:8080/HelloRest/HelloClient.html This is where the HTML is accessible. The following page should be loaded in the browser: Type something in the text field and click the Say hello button: The result should be the following: 4 Java client using RESTeasy RESTeasy is the JAX-RS implementation of the WildFly server. It also has a client library, which can be used in console applications. This example will show how. RESTeasy requires some additional dependencies, so the easiest way to create a client is to use Maven. Create a new Maven Project in Eclipse called HelloRestClient:
  • 6.
    6 Click Next, andselect the Create a simple project check-box: Click Next and type HelloRestClient for both Group Id and Artifact Id:
  • 7.
    7 Click Finish, andthe project should look like this: Edit the pom.xml and add the following lines shown with yellow background: <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>HelloRestClient</groupId> <artifactId>HelloRestClient</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>3.0.10.Final</version> </dependency> </dependencies> </project> 4.1 Untyped client Create a new class called UntypedHelloClient under the package hellorestclient with the following content: package hellorestclient; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Response; public class UntypedHelloClient { public static void main(String[] args) { try{ // Create a new RESTeasy client through the JAX-RS API: Client client = ClientBuilder.newClient(); // The base URL of the service: WebTarget target = client.target("http://localhost:8080/HelloRest/rest");
  • 8.
    8 // Building therelative URL manually for the sayHello method: WebTarget hello = target.path("hello").path("sayHello").queryParam("name", "me"); // Get the response from the target URL: Response response = hello.request().get(); // Read the result as a String: String result = response.readEntity(String.class); // Print the result to the standard output: System.out.println(result); // Close the connection: response.close(); } catch (Exception ex) { ex.printStackTrace(); } } } The project should look like this: Right click on the UntypedHelloClient.java and select Run As > Java Application. It should print the following:
  • 9.
    9 4.2 Typed client Createan interface called IHello under the package hellorestclient with the following content: package hellorestclient; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; @Path("hello") public interface IHello { @GET @Path("sayHello") public String sayHello(@QueryParam("name") String name); } Create a class called TypedHelloClient under the package hellorestclient with the following content: package hellorestclient; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; public class TypedHelloClient { public static void main(String[] args) { try { // Create a new RESTeasy client through the JAX-RS API: Client client = ClientBuilder.newClient(); // The base URL of the service: WebTarget target = client.target("http://localhost:8080/HelloRest/rest"); // Cast it to ResteasyWebTarget: ResteasyWebTarget rtarget = (ResteasyWebTarget)target; // Get a typed interface: IHello hello = rtarget.proxy(IHello.class); // Call the service as a normal Java object: String result = hello.sayHello("me"); // Print the result: System.out.println(result); } catch (Exception ex) { ex.printStackTrace(); } } } Right click on the TypedHelloClient.java and select Run As > Java Application. It should print the following: