I am trying to create rest client which allows the user to insert, update and delete film from the database. I keep getting 500 internal server error not sure what's wrong with the code. Can someone help please.
What I have tried:
I have searched online to find out what 500 internal server error is, nothing is showing.
FilmsResourse.java:
package com.democo.jersey.film.resources;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import com.democo.jersey.film.model.Film;
import com.democo.jersey.film.model.FilmDAO;
@Path("/films")
public class FilmsResource {
@Context
UriInfo uriInfo;
@Context
Request request;
@GET
@Produces(MediaType.TEXT_XML)
public List<Film> getFilmsBrowser() {
List<Film> films = new ArrayList<Film>();
films.addAll( FilmDAO.getInstance().getModel().values());
return films;
}
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Film> getFilms() {
List<Film> films = new ArrayList<Film>();
films.addAll( FilmDAO.getAllFilms());
return films;
}
@GET
@Path("count")
@Produces(MediaType.TEXT_PLAIN)
public String getCount() {
int count = FilmDAO.getInstance().getModel().size();
return String.valueOf(count);
}
@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void newFilm(
@FormParam("id") int id,
@FormParam("title") String title,
@FormParam("year") int year,
@FormParam("director") String director,
@FormParam("stars") String stars,
@FormParam("review") String review,
@Context HttpServletResponse servletResponse
) throws IOException {
Film film = new Film(id,title,year, director, stars, review);
if (title!=null){
film.setTitle(title);
}
FilmDAO.getInstance().getModel().put(id+"", film);
servletResponse.sendRedirect("../create_film.html");
}
@Path("{film}")
@Produces(MediaType.TEXT_XML)
public FilmResource getFilm(
@FormParam("film") String id) {
int intId=0;
try{
intId=Integer.parseInt(id);
}catch(Exception e){}
return new FilmResource(uriInfo, request, intId);
}
}
FilmResourse.java:
package com.democo.jersey.film.resources;
import java.util.ArrayList;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import javax.xml.bind.JAXBElement;
import com.democo.jersey.film.model.Film;
import com.democo.jersey.film.model.FilmDAO;
public class FilmResource {
FilmDAO dao = new FilmDAO();
@Context
UriInfo uriInfo;
@Context
Request request;
int id;
public FilmResource(UriInfo uriInfo, Request request, int id) {
this.uriInfo = uriInfo;
this.request = request;
this.id = id;
}
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/allFilms")
public ArrayList<Film> getAllFilms(){
return FilmDAO.getAllFilms();
}
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("/search/{search}")
public ArrayList<Film> getFilmsMatching(@PathParam("search") String search){
ArrayList<Film> films = FilmDAO.getFilmsMatching(search);
if(films==null) {
throw new RuntimeException("Get: Film containing " + search + " not found");
}
return films;
}
@GET
@Produces(MediaType.TEXT_XML)
public Film getFilmHTML() {
Film film = FilmDAO.getInstance().getModel().get(id);
if(film==null)
throw new RuntimeException("Get: film with " + id + " not found");
return film;
}
@PUT
@Consumes(MediaType.APPLICATION_XML)
public Response putFIilm(JAXBElement<Film> film) {
Film f = film.getValue();
return putAndGetResponse(f);
}
@DELETE
public void deleteFilm() {
Film f = FilmDAO.getInstance().getModel().remove(id);
if(f==null)
throw new RuntimeException("Delete: film with " + id + " not found");
}
private Response putAndGetResponse(Film film) {
Response res;
if(FilmDAO.instance.getModel().containsKey(film.getId())) {
res = Response.noContent().build();
}
else {
res = Response.created(uriInfo.getAbsolutePath()).build();
}
FilmDAO.getInstance().getModel().put(film.getId()+"", film);
return res;
}
}
Tester.java:
package com.democo.jersey.film.client;
import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import com.democo.jersey.film.model.Film;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.api.representation.Form;
public class Tester {
public static void main(String[] args) {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(getBaseURI());
Film film = new Film(123456,
"Four Lions",
2010,
"Chris Morris, Omar, Hassan, Barry, Waj and Faisal",
"Chris Morris, Omar, Hassan, Barry, Waj and Faisal",
"Four Lions is an English movie released on 07 May, 2010. The movie is directed by Christopher Morris and featured Will Adamsdale and Adeel Akhtar as lead characters.");
ClientResponse response = service.path("rest").path("films").accept(MediaType.APPLICATION_XML).put(ClientResponse.class, film);
System.out.println(response.getStatus());
System.out.println(service.path("rest").path("films").accept(
MediaType.TEXT_XML).get(String.class));
System.out.println(service.path("rest").path("films").accept(
MediaType.APPLICATION_JSON).get(String.class));
System.out.println(service.path("rest").path("films").accept(
MediaType.APPLICATION_XML).get(String.class));
System.out.println(service.path("rest").path("films/1").accept(
MediaType.APPLICATION_XML).get(String.class));
service.path("rest").path("films/3").delete();
System.out.println(service.path("rest").path("films").accept(
MediaType.APPLICATION_XML).get(String.class));
Form form = new Form();
form.add("id", 12345666);
form.add("title", "One film");
form.add("year", 2019);
form.add("director", "Dhany");
form.add("stars", "Dhany and John");
form.add("review", "5 star");
response = service.path("rest").path("films").type(MediaType.APPLICATION_FORM_URLENCODED)
.post(ClientResponse.class, form);
System.out.println("Form response " + response.getEntity(String.class));
System.out.println(service.path("rest").path("films").accept(
MediaType.APPLICATION_XML).get(String.class));
}
private static URI getBaseURI() {
return UriBuilder.fromUri(
"http://localhost:8080/com.democo.jersey.film").build();
}
}
Index.html:
<!DOCTYPE html>
<html>
<head>
<!--- Creating a heading for the form to create new film in the application -->
<h1>INSERT A FILM</h1>
<title>Form to create a new film</title>
<link rel="stylesheet" href="css/styles.css" type="text/css" />
</head>
<body>
<!-- <form actsion="ControlInsertFilm" method="POST"> -->
<form action="/com.democo.jersey.film/rest/films" method="POST">
<label for="id">ID</label> <input name="id" value='"getId()"' /> <br />
<label for="title">title</label> <input name="title"
value='"getTitle()"' /> <br /> <label for="year">year</label> <input
name="year" value='"getYear()"' /> <br /> <label for="director">director</label>
<input name="director" value='"getDirector()"' /> <br /> <label
for="stars">stars</label> <input name="stars" value='"getStars()"' />
<br /> <label for="review">review</label> <input name="review"
value='"get()"' /> <br /> <input type="submit" value="Submit" />
</form>
</body>
</html>