diff --git a/src/main/java/de/taimos/httputils/callbacks/HTTPByteCallback.java b/src/main/java/de/taimos/httputils/callbacks/HTTPByteCallback.java new file mode 100644 index 0000000..c263b93 --- /dev/null +++ b/src/main/java/de/taimos/httputils/callbacks/HTTPByteCallback.java @@ -0,0 +1,16 @@ +package de.taimos.httputils.callbacks; + +import org.apache.http.HttpResponse; + +import de.taimos.httputils.WS; + +public abstract class HTTPByteCallback extends HTTPStatusCheckCallback { + + @Override + protected void checkedResponse(HttpResponse response) { + this.byteResponse(WS.getResponseAsBytes(response), response); + } + + protected abstract void byteResponse(byte[] body, HttpResponse response); + +} diff --git a/src/main/java/de/taimos/httputils/callbacks/HTTPStatusCheckCallback.java b/src/main/java/de/taimos/httputils/callbacks/HTTPStatusCheckCallback.java new file mode 100644 index 0000000..c344461 --- /dev/null +++ b/src/main/java/de/taimos/httputils/callbacks/HTTPStatusCheckCallback.java @@ -0,0 +1,29 @@ +package de.taimos.httputils.callbacks; + +import org.apache.http.HttpResponse; + +import de.taimos.httputils.HTTPResponseCallback; + +public abstract class HTTPStatusCheckCallback implements HTTPResponseCallback { + + @Override + public final void response(HttpResponse response) { + int statusCode = response.getStatusLine().getStatusCode(); + if (statusCode != this.expectedStatus()) { + this.invalidStatus(statusCode, response); + } + this.checkedResponse(response); + } + + protected abstract void checkedResponse(HttpResponse response); + + protected abstract void invalidStatus(int status, HttpResponse response); + + /** + * @return the expected status code of the {@link HttpResponse} + */ + protected int expectedStatus() { + return 200; + } + +} diff --git a/src/main/java/de/taimos/httputils/callbacks/HTTPStringCallback.java b/src/main/java/de/taimos/httputils/callbacks/HTTPStringCallback.java new file mode 100644 index 0000000..396ade9 --- /dev/null +++ b/src/main/java/de/taimos/httputils/callbacks/HTTPStringCallback.java @@ -0,0 +1,16 @@ +package de.taimos.httputils.callbacks; + +import org.apache.http.HttpResponse; + +import de.taimos.httputils.WS; + +public abstract class HTTPStringCallback extends HTTPStatusCheckCallback { + + @Override + protected void checkedResponse(HttpResponse response) { + this.stringResponse(WS.getResponseAsString(response), response); + } + + protected abstract void stringResponse(String body, HttpResponse response); + +} diff --git a/src/test/java/de/taimos/httputils/Tester1.java b/src/test/java/de/taimos/httputils/Tester1.java index 6e219b6..4fa50bb 100644 --- a/src/test/java/de/taimos/httputils/Tester1.java +++ b/src/test/java/de/taimos/httputils/Tester1.java @@ -18,6 +18,8 @@ import org.junit.Assert; import org.junit.Test; +import de.taimos.httputils.callbacks.HTTPStringCallback; + /** * @author thoeger * @@ -63,6 +65,39 @@ public void fail(Exception e) { Assert.assertTrue(cdl.await(10, TimeUnit.SECONDS)); } + /** + * + */ + @Test + public void testGetAsyncStringCB() throws InterruptedException { + final CountDownLatch cdl = new CountDownLatch(1); + WS.url("http://www.heise.de").getAsync(new HTTPStringCallback() { + + @Override + public void fail(Exception e) { + System.out.println(e); + Assert.fail(); + cdl.countDown(); + } + + @Override + protected void invalidStatus(int status, HttpResponse response) { + System.out.println("Invalid status: " + status); + Assert.fail(); + cdl.countDown(); + } + + @Override + protected void stringResponse(String body, HttpResponse response) { + Assert.assertNotNull(body); + Assert.assertFalse(body.isEmpty()); + cdl.countDown(); + } + + }); + Assert.assertTrue(cdl.await(10, TimeUnit.SECONDS)); + } + /** * */