Dhanyaal Ответов: 0

Как создать jersey rest clietn с помощью java и библиотеки jersey?


Я пытаюсь создать rest-клиент, который позволяет пользователю вставлять, обновлять и удалять фильм из базы данных. Я постоянно получаю 500 внутренних ошибок сервера, не зная, что не так с кодом. Может кто-нибудь помочь, пожалуйста.

Что я уже пробовал:

Я искал в интернете, чтобы узнать, что такое 500 внутренняя ошибка сервера, но ничего не показывает.

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;


// Will map the resource to the URL films
@Path("/films")
// Creating public class FilmsResource
public class FilmsResource {
	// Allows to insert contextual objects into the class, 
	// e.g. ServletContext, Request, Response, UriInfo
	@Context
	UriInfo uriInfo;
	@Context
	Request request;


	// Return and get the list of films to the user in the browser
	@GET
	// Creating media type for the text_xml
	@Produces(MediaType.TEXT_XML)
	// Calling the getFilmsBrowser method and calling the list of films
	public List<Film> getFilmsBrowser() {
		// Creating new rray list of film
		List<Film> films = new ArrayList<Film>();
		// Adding all the films and calling the filmdao class.
		// Get instance and calling the getModel method 
		films.addAll( FilmDAO.getInstance().getModel().values());
		// Return the films
		return films; 
	} // CLose public getFilmsBrowser method

	// Return the list of films for applications
	@GET
	// Creating media type for the xml and json
	@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
	// Creating public getFilms method
	public List<Film> getFilms() {
		// Creating new array list of films
		List<Film> films = new ArrayList<Film>();
		// Calling the film class and filmdao to get the instance and getting the model for the id
		// add all films
//		films.addAll( FilmDAO.instance.getModel().values() );
		films.addAll( FilmDAO.getAllFilms());
		// Return the films
		return films; 
	} // Close public getFilms method


	// Returns the number of films
	// Use http://localhost:8080/com.democo.jersey.film/rest/todos/count
	// to get the total number of records
	@GET
	@Path("count")
	@Produces(MediaType.TEXT_PLAIN)
	// Creating public string for the getCount method
	public String getCount() {
		// Creating integer count equal to filmdao to get the instance and calling the getModel in the filmDao class
		int count = FilmDAO.getInstance().getModel().size();
		// Return the strint value of the count
		return String.valueOf(count);
	} // Close get Count method
	

	// Posting the film using the form
	@POST
	// Creating media type for the text_html and media type for the application form
	@Produces(MediaType.TEXT_HTML)
	@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
	// Creating new film
	public void newFilm(
			// Creating form params for the different columns
			@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 {
		// Creating new film
		Film film = new Film(id,title,year, director, stars, review);
		// If the title is not equal to null, return the title
		if (title!=null){
			film.setTitle(title);
		} // Close if statement for title not equal to null
		// Calling the filmdao to get the instance and calling the getModel method to update the film using the id
		FilmDAO.getInstance().getModel().put(id+"", film);
		// Calling the create_film.html for the servletResponse
		servletResponse.sendRedirect("../create_film.html");
	} // Close public void new film


	// Defines that the next path parameter after film is
	// treated as a parameter and passed to the FilmResources
	// Allows to type http://localhost:8080/com.democo.jersey.film/rest/films/1
	// 1 will be treated as parameter film and passed to FilmResource
	@Path("{film}")
	@Produces(MediaType.TEXT_XML)
	public FilmResource getFilm(
			// Creating path param for the film and getting string id
			@FormParam("film") String id) {
		// Setting int id equal to 0
		int intId=0;
		// Creating try and catch for the int id and return new FilmResource 
		try{
			intId=Integer.parseInt(id);
		}catch(Exception e){}
		return new FilmResource(uriInfo, request, intId);
	} // Close public FilmResource for the get film
} // Close public class FilmsResource



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;
/**
 * Creating film resource for the crdue mthods.
 * create, retrieve, update and delte
 * Retrive would get all the films on the browser
 * Update(put) would allow to update film.
 * Delete would delete the film from the database based on id
 * @author Dhanyaal. 
 */

//@Path("films")
public class FilmResource {
	// Creating new film dao and calling the FilmDAO class
	// it asks the dao and then prints out the list of films

	FilmDAO dao = new FilmDAO();
	// Creating context and creating variables for the UriInfo
	// Allows to insert contextual objects into the class, 
	// e.g. ServletContext, Request, Response, UriInfo
	@Context
	UriInfo uriInfo;
	// Creating another context and creating variable for the request and int id
	@Context
	Request request;
	int id;

	//TODO function added
	//	// Getting all films from the array list
	//	ArrayList<Film> FilmList = FilmDAO.getAllFilms();	
	//	// Creating form loop for one film and then printing out the film
	//	for (int i=0; i<FilmList.size(); i++ ) {
	//		// Get film
	//		Film oneFilm = FilmList.get(i);
	//		// Print films out onto the console
	//		System.out.println(oneFilm.toString());
	//		System.out.println("All data displayed successfully");
	//	} // Close for loop
	
	// Creating public FilmResource method
	public FilmResource(UriInfo uriInfo, Request request, int id) {
		this.uriInfo = uriInfo;
		this.request = request;
		this.id = id;
	} // Close public FilmResource method

	//getAllFilms
	@GET
	@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
	@Path("/allFilms")
	public ArrayList<Film> getAllFilms(){
		return FilmDAO.getAllFilms();
	}


	//getFilmsMatching
	@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;
	}

	// For the browser
	// Getting/reading the film on the browser
	@GET
	// Creating media type for the text_xml
	@Produces(MediaType.TEXT_XML)
	// Creating public film for the get film html
	public Film getFilmHTML() {
		// Calling the film class and filmdao to get the instance and getting the model for the id
		Film film = FilmDAO.getInstance().getModel().get(id);
		// If statement for film equal to null
		if(film==null)
			throw new RuntimeException("Get: film with " + id +  " not found");
		// Return the film
		return film;
	} // Close getFilmHTML method

	// Creating put to Update/Replace film
	@PUT
	// Creating media type for the putFIilm and creating media type for the xml
	@Consumes(MediaType.APPLICATION_XML)
	// Creating putFIilm method for the jax b element and callin ghte film class
	public Response putFIilm(JAXBElement<Film> film) {
		// getting value from the film class
		Film f = film.getValue();
		// Return the put and get responce
		return putAndGetResponse(f);
	} // CLose put film method

	// Creating delete to delete the film
	@DELETE
	// Creating public void deleteFilm method which would delete the film from the database
	public void deleteFilm() {
		// Calling the film class and filmdao to get the instance and getting the model.
		// removing the id from the database to delete the film
		Film f = FilmDAO.getInstance().getModel().remove(id);
		// If statement for f equal to null
		if(f==null)
			throw new RuntimeException("Delete: film with " + id +  " not found");
	} // Close delete film method

	// Creating public response for the put and get
	private Response putAndGetResponse(Film film) {
		// Variable for the response
		Response res;
		// if filmdao.instance get model contains key get the id
		if(FilmDAO.instance.getModel().containsKey(film.getId())) {
			// Creating res variable equal to response.noContent
			res = Response.noContent().build();
		} // Close if statement
		// Otherwise response.created
		else {
			res = Response.created(uriInfo.getAbsolutePath()).build();
		} // CLose else
		// Update the film
		FilmDAO.getInstance().getModel().put(film.getId()+"", film);
		// return response
		return res;
	} // Close private putAndGetResponse
}



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);
//		URI url=new URI("com.democo.jersey.film");
//		System.out.print(getBaseURI());
		WebResource service = client.resource(getBaseURI());
		// Create one todo
		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").path(film.getId()+"").accept(MediaType.APPLICATION_XML).put(ClientResponse.class, film);
		ClientResponse response = service.path("rest").path("films").accept(MediaType.APPLICATION_XML).put(ClientResponse.class, film);
		// Return code should be 201 == created resource
		System.out.println(response.getStatus());
		// Get the films
		System.out.println(service.path("rest").path("films").accept(
				MediaType.TEXT_XML).get(String.class));
		// Get XML for application
		System.out.println(service.path("rest").path("films").accept(
				MediaType.APPLICATION_JSON).get(String.class));
		// Get JSON for application
		System.out.println(service.path("rest").path("films").accept(
				MediaType.APPLICATION_XML).get(String.class));

		// Get the fim with id 1
		System.out.println(service.path("rest").path("films/1").accept(
				MediaType.APPLICATION_XML).get(String.class));
		// get film with id 1
		service.path("rest").path("films/3").delete();
		// Get all films, id 1 should be deleted
		System.out.println(service.path("rest").path("films").accept(
				MediaType.APPLICATION_XML).get(String.class));

		// Create a film
		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");
		// add the film
		response = service.path("rest").path("films").type(MediaType.APPLICATION_FORM_URLENCODED)
				.post(ClientResponse.class, form);
		// Print response
		System.out.println("Form response " + response.getEntity(String.class));
		// Get the all films, id 4 should be created
		System.out.println(service.path("rest").path("films").accept(
				MediaType.APPLICATION_XML).get(String.class));
	} // CLose main method
	
	// Creating privte static URI to get the base uri
	private static URI getBaseURI() {
		// Return the uri builder from the uro
		return UriBuilder.fromUri(
				"http://localhost:8080/com.democo.jersey.film").build();
	} // Close private static uri get base uri
} // Close public class tester




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>

0 Ответов