./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:16: *

Every {@code ObjectBody} used to report {@code REPLAYABLE}. A caller who reused a builder or ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:21:class ObjectBodyReplayabilityTest { ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:30: assertThat(ObjectBody.json(new ImmutableOrder("order-1", 2)).replayability()) ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:32: assertThat(ObjectBody.json("plain-string").replayability()) ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:34: assertThat(ObjectBody.json(List.of("a", "b")).replayability()) ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:36: assertThat(ObjectBody.json(Map.of("k", 1)).replayability()) ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:43: assertThat(ObjectBody.json(new ArrayList<>(List.of("a"))).replayability()) ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:45: assertThat(ObjectBody.json(new LinkedHashMap<>(Map.of("k", 1))).replayability()) ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:54: ObjectBody.json(new OrderWithMutableLines("order-1", new ArrayList<>(List.of("line")))) ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:58: ObjectBody.json(new OrderWithMutableLines("order-1", List.of("line"))).replayability()) ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBodyReplayabilityTest.java:68: assertThat(ObjectBody.json(new Object()).replayability()).isEqualTo(BodyReplayability.ONE_SHOT); ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/restclient/BlockingRedirectCoordinatorTest.java:159: dev.caskeleton.adapter.outbound.httpclient.api.body.ObjectBody.json( ./adapter/outbound/httpclient/src/test/java/dev/caskeleton/adapter/outbound/httpclient/contract/StatefulUpstreamRetryContractTest.java:152: dev.caskeleton.adapter.outbound.httpclient.api.body.ObjectBody.json( ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBody.java:10: *

Replayability is a property of the value, not of the codec. Every {@code ObjectBody} used to ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBody.java:22:public record ObjectBody(Object value, String mediaType) implements BodySource { ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBody.java:24: public ObjectBody { ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBody.java:29: public static ObjectBody json(Object value) { ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBody.java:30: return new ObjectBody(value, "application/json"); ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBody.java:42: return "ObjectBody[" + value.getClass().getSimpleName() + ", " + mediaType + ", REDACTED]"; ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/api/body/ObjectBody.java:71: && collection.stream().allMatch(ObjectBody::deeplyImmutable); ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/api/body/BodySource.java:13: permits EmptyBody, ObjectBody, ByteArrayBody, ReopenableStreamBody, OneShotStreamBody { ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/service/KernelHttpExchangeAdapter.java:9:import dev.caskeleton.adapter.outbound.httpclient.api.body.ObjectBody; ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/service/KernelHttpExchangeAdapter.java:190: return body == null ? EmptyBody.instance() : ObjectBody.json(body); ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/service/ReactiveKernelHttpExchangeAdapter.java:8:import dev.caskeleton.adapter.outbound.httpclient.api.body.ObjectBody; ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/service/ReactiveKernelHttpExchangeAdapter.java:249: return body == null ? EmptyBody.instance() : ObjectBody.json(body); ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/restclient/RestClientBodyWriter.java:6:import dev.caskeleton.adapter.outbound.httpclient.api.body.ObjectBody; ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/restclient/RestClientBodyWriter.java:36: if (body instanceof ObjectBody objectBody) { ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/webclient/WebClientBodyWriter.java:6:import dev.caskeleton.adapter.outbound.httpclient.api.body.ObjectBody; ./adapter/outbound/httpclient/src/main/java/dev/caskeleton/adapter/outbound/httpclient/webclient/WebClientBodyWriter.java:72: if (body instanceof ObjectBody objectBody) {