package org.mockserver.examples.service.jettyclient; import com.fasterxml.jackson.databind.ObjectMapper; import org.eclipse.jetty.client.Address; import org.eclipse.jetty.client.ContentExchange; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.HttpExchange; import org.mockserver.examples.model.Book; import org.mockserver.examples.service.BookService; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; import static org.mockserver.examples.json.ObjectMapperFactory.createObjectMapper; /** * @author jamesdbloom */ @Component public class BookServiceJettyHttpClient implements BookService { @Resource private Environment environment; private Integer port; private Integer proxyPort; private String host; private ObjectMapper objectMapper; private HttpClient httpClient; @PostConstruct private void initialise() { port = environment.getProperty("bookService.port", Integer.class); proxyPort = environment.getProperty("bookService.proxyPort", Integer.class); host = environment.getProperty("bookService.host", "localhost"); objectMapper = createObjectMapper(); httpClient = createHttpClient(); } private HttpClient createHttpClient() { HttpClient httpClient = new HttpClient(); try { httpClient.setProxy(new Address(System.getProperty("http.proxyHost"), Integer.parseInt(System.getProperty("http.proxyPort")))); httpClient.start(); } catch (Exception e) { throw new RuntimeException("Exception creating HttpClient", e); } return httpClient; } @PreDestroy private void stopClient() { try { httpClient.stop(); } catch (Exception e) { throw new RuntimeException("Exception stopping HttpClient", e); } } @Override public Book[] getAllBooks() { try { ContentExchange contentExchange = new ContentExchange(true); contentExchange.setMethod("GET"); contentExchange.setURL("http://" + host + ":" + port + "/get_books"); httpClient.send(contentExchange); if (contentExchange.waitForDone() == HttpExchange.STATUS_COMPLETED) { return objectMapper.readValue(contentExchange.getResponseContent(), Book[].class); } else { throw new RuntimeException("Exception making request to retrieve all books"); } } catch (Exception e) { throw new RuntimeException("Exception making request to retrieve all books", e); } } @Override public Book getBook(String id) { try { ContentExchange contentExchange = new ContentExchange(true); contentExchange.setMethod("GET"); contentExchange.setURL("http://" + host + ":" + port + "/get_book" + "?id=" + id); httpClient.send(contentExchange); if (contentExchange.waitForDone() == HttpExchange.STATUS_COMPLETED) { return objectMapper.readValue(contentExchange.getResponseContent(), Book.class); } else { throw new RuntimeException("Exception making request to retrieve all books"); } } catch (Exception e) { throw new RuntimeException("Exception making request to retrieve a book with id [" + id + "]", e); } } }