package org.example.integration; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.client.Invocation; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.example.DocumentId; import org.glassfish.jersey.client.ClientConfig; import org.glassfish.jersey.filter.LoggingFilter; import org.glassfish.jersey.jetty.connector.JettyConnectorProvider; public class DocumentStorageDriver { public Response requestNotExistingDocument() { return execute(new Request() { @Override public String path() { return new DocumentId(Long.MAX_VALUE).asString(); } @Override public Response invoke(Invocation.Builder invocation) { return invocation.get(); } }); } public static interface Request{ String path(); Response invoke(Invocation.Builder invocation); } public Response uploadDocumentWithContent(final String content) { return execute(new Request() { @Override public String path() { return ""; } @Override public Response invoke(Invocation.Builder invocation) { return invocation.post(Entity.entity(content, MediaType.APPLICATION_OCTET_STREAM_TYPE)); } }); } private Response execute(Request request) { ClientConfig clientConfig = new ClientConfig(); clientConfig.connectorProvider(new JettyConnectorProvider()); clientConfig.register(new LoggingFilter()); Client client = ClientBuilder.newClient(clientConfig); WebTarget target = client.target("http://localhost:8080/servlet-sample"); Response response = request.invoke(target.path("storage/documents/" + request.path()).request()); response.bufferEntity(); return response; } }