In
this post, I am going to explain how to integrate Jersey with Embedded jetty
server.
If
you want to know about REST in detail, you can go through the following
tutorial.
If
you want to know about Jetty server, you can go through following tutorial.
Following
step-by-step procedure explains the implementation and deployment of complete application.
Step 1: Create new Maven
project ‘jetty_tutorial’ in Eclipse.
File
-> New -> Other. Select 'Maven Project'. Give the project name as
'jetty_tutorial'.
Step 2: Open pom.xml and
update the maven dependencies. I am using following maven dependencies.
<dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>9.4.0.RC1</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>9.4.0.RC1</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.15</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-core</artifactId> <version>2.15</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-jetty-http</artifactId> <version>2.15</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-moxy</artifactId> <version>2.15</version> </dependency> </dependencies>
Step 3: Create new package
'com.sample'. Add the class HelloWorld.java.
HelloWorld.java
package com.sample; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") public class HelloWorld { @GET @Path("test") @Produces(MediaType.TEXT_PLAIN) public String test() { return "Test"; } }
Step 4: Define App.java like
below.
App.java
package com.sample; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; public class App { public static void main(String[] args) throws Exception { ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); Server jettyServer = new Server(8080); jettyServer.setHandler(context); ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*"); jerseyServlet.setInitOrder(0); jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", HelloWorld.class.getCanonicalName()); try { jettyServer.start(); jettyServer.join(); } catch (Exception e) { e.printStackTrace(); } finally{ jettyServer.destroy(); } } }
Run
‘App.java’, you can able to see following log messages in console.
2016-11-15 13:42:19.682:INFO::main: Logging initialized @245ms to org.eclipse.jetty.util.log.StdErrLog 2016-11-15 13:42:19.828:INFO:oejs.Server:main: jetty-9.4.0.RC1 2016-11-15 13:42:19.828:WARN:oejs.Server:main: THIS IS NOT A STABLE RELEASE! DO NOT USE IN PRODUCTION! 2016-11-15 13:42:19.828:WARN:oejs.Server:main: Download a stable release from http://download.eclipse.org/jetty/ 2016-11-15 13:42:19.876:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0 2016-11-15 13:42:19.876:WARN:oejs.session:main: No SessionScavenger set, using defaults 2016-11-15 13:42:19.879:INFO:oejs.session:main: Scavenging every 600000ms 2016-11-15 13:42:20.712:INFO:oejsh.ContextHandler:main: Started o.e.j.s.ServletContextHandler@1f9e9475{/,null,AVAILABLE} 2016-11-15 13:42:21.022:INFO:oejs.AbstractConnector:main: Started ServerConnector@2506fbde{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} 2016-11-15 13:42:21.023:INFO:oejs.Server:main: Started @1588ms
Open
any browser and hit the url ‘http://localhost:8080/hello/test’, you can able to
see the message ‘Test’ in browser body.
Returning
a json response using embedded jetty.
Following step-by-step procedure explains
how to send json response.
Address.java
package com.sample; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Address { private String street; private String city; private String state; private String country; public Address() { this("No Data", "No Data", "No Data", "No Data"); } public Address(String area, String city, String state, String country) { super(); this.street = area; this.city = city; this.state = state; this.country = country; } public String getArea() { return street; } public String getCity() { return city; } public String getCountry() { return country; } public String getState() { return state; } public void setArea(String area) { this.street = area; } public void setCity(String city) { this.city = city; } public void setCountry(String country) { this.country = country; } public void setState(String state) { this.state = state; } }
Employee.java
package com.sample; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Employee { private String firstName; private String lastName; private long id; private Address permAddrees; private Address tempAddrees; public Employee() { this("No Data", "No Data", -1, new Address(), new Address()); } public Employee(String firstName, String lastName, long id, Address permAddrees, Address tempAddrees) { super(); this.firstName = firstName; this.lastName = lastName; this.id = id; this.permAddrees = permAddrees; this.tempAddrees = tempAddrees; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public long getId() { return id; } public void setId(long id) { this.id = id; } public Address getPermAddrees() { return permAddrees; } public void setPermAddrees(Address permAddrees) { this.permAddrees = permAddrees; } public Address getTempAddrees() { return tempAddrees; } public void setTempAddrees(Address tempAddrees) { this.tempAddrees = tempAddrees; } }
EmployeeService.java
package com.sample; import java.util.HashMap; import java.util.Map; public class EmployeeService { private static Map<Long, Employee> employees = new HashMap<>(); static { initializeEmployees(); } private static void initializeEmployees() { Address tempAddr1 = new Address("Electronic City", "Bangalore", "Karnataka", "India"); Address tempAddr2 = new Address("BTM Layout", "Bangalore", "Karnataka", "India"); Address permAddr1 = new Address("Marthali", "Bangalore", "Karnataka", "India"); Address permAddr2 = new Address("Bharath Nagar", "Hyderabad", "Andhra Pradesh", "India"); Employee emp1 = new Employee("Hari Krishna", "Gurram", 1, permAddr1, tempAddr1); Employee emp2 = new Employee("PTR", "PTR", 2, permAddr2, tempAddr2); employees.put(1l, emp1); employees.put(2l, emp2); } public static Map<Long, Employee> getAllEmployees() { return employees; } public static Employee getEmployee(long id) { return employees.get(id); } }
EmployeeResource.java
package com.sample; import java.util.ArrayList; import java.util.List; 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; @Path("employees") public class EmployeeResource { @GET @Produces(MediaType.APPLICATION_JSON) public List<Employee> getAllEmployees() { return new ArrayList<>(EmployeeService.getAllEmployees().values()); } @GET @Path("/{employeeId}") @Produces(MediaType.APPLICATION_JSON) public Employee getEmployee(@PathParam("employeeId") long empId) { return EmployeeService.getEmployee(empId); } }
App.java
package com.sample; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; public class App { public static void main(String[] args) throws Exception { ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); Server jettyServer = new Server(8080); jettyServer.setHandler(context); ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*"); jerseyServlet.setInitOrder(0); jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", EmployeeResource.class.getCanonicalName()); try { jettyServer.start(); jettyServer.join(); } catch (Exception e) { e.printStackTrace(); } finally { jettyServer.destroy(); } } }
Open
any browser, hit the url 'http://localhost:8080/employees/2'. You can able to
see following json response.
{"firstName":"PTR","id":2,"lastName":"PTR","permAddrees":{"area":"Bharath Nagar","city":"Hyderabad","country":"India","state":"Andhra Pradesh"},"tempAddrees":{"area":"BTM Layout","city":"Bangalore","country":"India","state":"Karnataka"}}
No comments:
Post a Comment