Repository: zalando/logbook
Issue: ChunkingSink does not write Requests/Responses without body

## Detailed Description

ChunkingSink should write requests/responses without a body. It should use the delegate sink directly as it only chunks the bodies.

## Your Environment

    * Version used: 2.1.0

## Reproducing
```java
// create a sink which prints to console
var sink = new ChunkingSink(new DefaultSink(new DefaultHttpLogFormatter(), new HttpLogWriter() {

	@Override
	public void write(Precorrelation precorrelation, String request) throws IOException {
		System.out.println(request);

	}


	@Override
	public void write(Correlation correlation, String response) throws IOException {
		System.out.println(response);
	}

}), 100);
// just use whatever does not matter for this test
var corr = new Correlation() {

	@Override
	public String getId() {
		return UUID.randomUUID().toString();
	}


	@Override
	public Instant getStart() {
		return Instant.now();
	}


	@Override
	public Instant getEnd() {
		return Instant.now();
	}


	@Override
	public Duration getDuration() {
		return Duration.ofSeconds(5);
	}

};
// will be printed
sink.write(corr, MockHttpRequest.create().withBodyAsString("bodyAsString"));
sink.write(corr, MockHttpRequest.create().withBodyAsString("bodyAsString"), MockHttpResponse.create().withBodyAsString("bodyAsString"));
// will not be printed
sink.write(corr, MockHttpRequest.create());
sink.write(corr, MockHttpRequest.create(), MockHttpResponse.create());
```

Changed files:
logbook-core/src/test/java/org/zalando/logbook/ChunkingSinkTest.java, logbook-core/src/main/java/org/zalando/logbook/ChunkingSink.java

diff --git a/logbook-core/src/main/java/org/zalando/logbook/ChunkingSink.java b/logbook-core/src/main/java/org/zalando/logbook/ChunkingSink.java
index b5676309..617786f2 100644
--- a/logbook-core/src/main/java/org/zalando/logbook/ChunkingSink.java
+++ b/logbook-core/src/main/java/org/zalando/logbook/ChunkingSink.java
@@ -48,6 +48,10 @@ public final class ChunkingSink implements Sink {
     }
 
     private Stream<String> chunk(final HttpMessage message) throws IOException {
+        if (message.getBodyAsString().isEmpty()) {
+            return Stream.of("");
+        }
+
         return stream(new ChunkingSpliterator(message.getBodyAsString(), minChunkSize, maxChunkSize), false);
     }
 
diff --git a/logbook-core/src/test/java/org/zalando/logbook/ChunkingSinkTest.java b/logbook-core/src/test/java/org/zalando/logbook/ChunkingSinkTest.java
index 13bfe06d..76ea5167 100644
--- a/logbook-core/src/test/java/org/zalando/logbook/ChunkingSinkTest.java
+++ b/logbook-core/src/test/java/org/zalando/logbook/ChunkingSinkTest.java
@@ -29,10 +29,19 @@ final class ChunkingSinkTest {
     private final Sink unit = new ChunkingSink(delegate, 20);
 
     @Test
-    void shouldDelegateActive() {
+    void delegatesActive() {
         assertThat(unit.isActive(), is(false));
     }
 
+    @Test
+    void ignoresEmptyBodies() throws IOException {
+        final List<String> strings = captureRequest("");
+
+        assertThat(strings, contains(
+                allOf(startsWith("Incoming Request"))
+        ));
+    }
+
     @Test
     void shouldWriteSingleRequestIfLengthNotExceeded() throws IOException {
         final List<String> chunks = captureRequest("HelloWorld");